1. 程式人生 > 實用技巧 >翻轉二叉樹

翻轉二叉樹

翻轉二叉樹

翻轉一棵二叉樹。

示例

輸入:

     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/