114 二叉樹展開為鍊錶

2021-09-25 18:57:52 字數 607 閱讀 8757

給定乙個二叉樹,原地將它展開為鍊錶。

例如,給定二叉樹

1

/ \2 5

/ \ \

3 4 6

將其展開為:

1

\ 2\3

\4\5

\6

思路:從題目可以看出來要求先根遍歷。從根節點開始出發,先檢測其左子結點是否存在:

(1)找到左子結點最後面的右子節點(如果沒有,就是左子節點本身)。

(2)將根節點和其右子節點斷開,把原右子節點連到原左子結點最後面的右子節點之後(滿足先根遍歷的順序)。

(3)將左子結點及其後面所有結構一起連到原右子節點的位置。

(4)將根節點的左子節點置為nullptr。

然後將根節點置為其右節點,不斷重複此過程。

class solution 

pre->right=root->right;

root->right=root->left;

root->left=nullptr;

}root=root->right;}}

};

114 二叉樹展開為鍊錶

首先是原地演算法的定義 演算法原地工作的含義是指不需要任何額外的輔助,演算法所需要的輔助空間不隨著問題的規模而變化,是乙個確定的值。通過觀察示例可以知道,我們可以猜想,大方向是前序遍歷。第一種思路 dfs。設定乙個全域性的指標 這種做法有點脫離原地演算法,因為多開闢了乙個指標變數 核心思想是拿到乙個...

114 二叉樹展開為鍊錶

一開始寫的 114 二叉樹展開為鍊錶 definition for a binary tree node.class treenode def init self,x self.val x self.left none self.right none class solution def flatt...

114 二叉樹展開為鍊錶

給定乙個二叉樹,原地將它展開為鍊錶。例如,給定二叉樹 1 2 5 34 6將其展開為 1 2 3 4 5 6我們發現,如果從最底層的結點開始,都把它的右孩子插入在左孩子的最後乙個結點處,然後再遞迴的調整結果來的這棵樹,則整棵樹滿足題意。為啥?因為最左下的子樹我們都調整好了。也可以認為這是中序遍曆法。...