Given the root of a binary tree, invert the tree, and return its root.
給予一個二元的樹,反轉這個樹和回傳他的根。
Example 1:
Input: root = [4,2,7,1,3,6,9] Output: [4,7,2,9,6,3,1]
Example 2:
Input: root = [2,1,3] Output: [2,3,1]
Example 3:
Input: root = [] Output: []
solution:
1. 程式碼開頭有一個對二元樹節點的定義,即 TreeNode 函式>
2. 每個節點都有一個值 val,以及指向左子節點和右子節點的指標 left 和 right。
3. 接著執行 invertTree,它接受一個二元樹的根節點作為參數,並執行其中的 recursion。
4. 接著運用解構賦值中的交換變數來翻轉該二元樹的結構。
Code 1:
// ES5
//Definition for a binary tree node.
// function TreeNode(val, left, right) {
// this.val = (val === undefined ? 0 : val)
// this.left = (left === undefined ? null : left)
// this.right = (right === undefined ? null : right)
// }
//ES6+
//Definition for a binary tree node.
class TreeNode {
constructor(val, left = null, right = null) {
this.val = val;
this.left = left;
this.right = right;
}
}
var invertTree = function(root) {
traverse(root)
return root
};
var traverse = function(root) {
if (root === null) return
let temp = root.right
root.right = root.left
root.left = temp
//[root.left, root.right] = [root.right, root.left]
traverse(root.left)
traverse(root.right)
}
FlowChart:
Example 1
let test1 = new TreeNode(4,
new TreeNode(2,
new TreeNode(1),
new TreeNode(3)
),
new TreeNode(7,
new TreeNode(6),
new TreeNode(9)
)
); //[4,2,7,1,3,6,9]
let ans1 = new TreeNode(4,
new TreeNode(7,
new TreeNode(9),
new TreeNode(6)
),
new TreeNode(2,
new TreeNode(3),
new TreeNode(1)
)
); //[4,7,2,9,6,3,1]
Example 2
let test2 = new TreeNode(2,
new TreeNode(1),
new TreeNode(3)
); //[2,1,3]
let ans2 = new TreeNode(2,
new TreeNode(3),
new TreeNode(1)
); //[2,3,1]
Example 2
let test3 = new TreeNode(); //[] let ans3 = new TreeNode() //[]