156 上下翻轉二叉樹

2021-10-24 06:02:07 字數 1639 閱讀 8249

題目描述:

給定乙個二叉樹,其中所有的右節點要麼是具有兄弟節點(擁有相同父節點的左節點)的葉節點,要麼為空,將此二叉樹上下翻轉並將它變成一棵樹, 原來的右節點將轉換成左葉節點。返回新的根。

例子:

輸入: [1,2,3,4,5]

輸出: 返回二叉樹的根 [4,5,2,#,#,3,1]

說明:

對 [4,5,2,#,#,3,1] 感到困惑? 下面詳細介紹請檢視 二叉樹是如何被序列化的。

二叉樹的序列化遵循層次遍歷規則,當沒有節點存在時,』#』 表示路徑終止符。

這裡有乙個例子:

上面的二叉樹則被序列化為 [1,2,3,#,#,4,#,#,5].

方法1:

主要思路:

(1)迭代實現;

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

return parent;

//返回}}

;

方法2:主要思路:

(1)遞迴;

(2)將左子樹進行遞迴,獲得左子樹的最終結果;

(3)將左子樹的最右邊的葉子結點連線上根節點和右子樹;

(4)將根節點的左右子樹置為空;

/**

* definition for a binary tree node.

* struct treenode

* treenode(int x) : val(x), left(nullptr), right(nullptr) {}

* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}

* };

*/class

solution

//左子樹獲得結果

treenode* new_root=

upsidedownbinarytree

(root-

>left)

; treenode* tmp_root=new_root;

//獲得左子樹的最右邊的結點

while

(tmp_root-

>right)

//將最右邊的結點連線上根節點和右子樹

tmp_root-

>left=root-

>right;

tmp_root-

>right=root;

//置為空

root-

>left=

nullptr

; root-

>right=

nullptr

;return new_root;}}

;

翻轉二叉樹

問題描述 翻轉一棵二叉樹 樣例 1 1 2 3 3 2 4 4 實現思路 從根出發開始操作,如果要操作的節點是空值,則不進行任何操作 否則,交換左右兒子,這裡新建乙個temp變數作為過渡。然後利用遞迴演算法,分別對左右子樹進行處理。實現 definition of treenode class tr...

翻轉二叉樹

invert a binary tree.4 2 7 1 3 6 9to 4 7 2 9 6 3 1 思路 採取先序遍歷,根 左子樹 右子樹,自上而下分別把結點的左子樹和右子樹翻轉,例如,結點4的左子樹2和右子樹7調換4 7 2 6 9 1 3 再依次呼叫inverttree函式傳左子樹和右子樹進去...

翻轉二叉樹

目錄當前節點不為空則交換左右子節點,遞迴非常直觀。func inverttree1 root treenode treenode return root 該方法類似樹的層次遍歷,出隊元素交換左右子節點,當前節點左右不為空則入隊。func inverttree2 root treenode treen...