翻轉二叉樹
阿新 • • 發佈:2020-09-16
翻轉二叉樹
翻轉一棵二叉樹。
示例
輸入:
4
/ \
2 7
/ \ / \
1 3 6 9
輸出:
4
/ \
7 2
/ \ / \
9 6 3 1
題解
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /** * @param {TreeNode} root * @return {TreeNode} */ var invertTree = function(root) { if(!root) return root; invertTree(root.left); invertTree(root.right); [root.left, root.right] = [root.right, root.left]; return root; };
思路
本題是經典的二叉樹操作的題目,直接從根節點進行遞迴遍歷,並從葉子節點進行翻轉,如果當前遍歷到root
,那麼只需要繼續交換兩棵子樹的位置即可完成翻轉,首先判斷節點是否存在,不存在則直接返回空節點,之後遞迴左子樹以及右子樹之後定義一個解構賦值的操作(ES6
允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構賦值),將左子樹與右子樹交換位置,類似於後續遞迴遍歷,由於不斷進行遞迴操作整體是由葉節點開始進行交換的,最後返回根節點即可。
每日一題
https://github.com/WindrunnerMax/EveryDay
參考
https://leetcode-cn.com/problems/invert-binary-tree/