翻轉二叉樹
翻轉一棵二叉樹。
示例:輸入:
4
/
2 7/ \ /
1 3 6 9
輸出:
4
/
7 2/ \ /
9 6 3 1
備註:這個問題是受到 max howell 的 原問題 啟發的 :
谷歌:我們90%的工程師使用您編寫的軟體(homebrew),但是您卻無法在面試時在白板上寫出翻轉二叉樹這道題,這太糟糕了。
/**
* definition for a binary tree node.
* public class treenode
* treenode(int val)
* treenode(int val, treenode left, treenode right)
* }*/// 解法一、 遞迴,後序遍歷展平左右子樹
// class solution
// flatten(root.left);
// flatten(root.right);
// treenode right = root.right;
// root.right = root.left;
// root.left = null;
// treenode p = root;
// while (p.right != null)
// p.right = right;
// }
// }
// 解法二、 迭代實現,o(1)空間複雜度,最優解
class
solution
treenode cur = root;
// 一直往右看,只要節點有左孩子就左子樹移到右子樹
while
(cur != null)
p.right = right;
} cur = cur.right;}}
}
226 翻轉二叉樹
翻轉一棵二叉樹。示例 輸入 4 2 7 1 3 6 9 輸出 4 7 2 9 6 3 1 備註 這個問題是受到 max howell 的 原問題 啟發的 谷歌 我們90 的工程師使用您編寫的軟體 homebrew 但是您卻無法在面試時在白板上寫出翻轉二叉樹這道題,這太糟糕了。class soluti...
226 翻轉二叉樹
解題思路 看到題目就會想到要左右節點交換,但是糾結了很久的問題是在遞迴左右節點時要不要判斷左右節點為空,後來看了別人的解題思路想到了,其實不用判斷,不管是否為空都要左右節點交換。至於root為空時,root.left是否合理的問題,更不用考慮了,因為root.left是通過別的值儲存起來的,且roo...
226 翻轉二叉樹
翻轉一棵二叉樹。示例 輸入 輸出 翻轉一顆空樹還是空樹,因此,對於每乙個節點,分別翻轉它的子樹,把該節點的左右子樹交換,遞迴的翻轉所有節點。definition for a binary tree node.struct treenode class solution treenode left i...