226.翻轉二叉樹
- 翻轉二叉樹
難度簡單413
翻轉一棵二叉樹。
示例:
輸入:
4 / \ 2 7 / \ / \ 1 3 6 9
輸出:
4 / \ 7 2 / \ / \ 9 6 3 1
1.DFS
time : O(n)
space: O(n) 最好 O(1) 最壞 O(n)退換成鏈表
//1.遞歸 DFS
public TreeNode invertTree(TreeNode root) {
if(root == null) return null;
TreeNode tmp = root.left;
root.left = invertTree(root.right);
root.right = invertTree(tmp);
return root;
}
2.棧
time:O(n)
space:O(n)
//棧
public TreeNode invertTree(TreeNode root) {
if(root == null) return null;
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while(!stack.isEmpty()){
TreeNode t = stack.pop();
if(t.left != null) stack.push(t.left);
if(t.right != null) stack.push(t.right);
TreeNode tmp = t.left;
t.left = t.right;
t.right = tmp;
}
return root;
}