Skip to content

Latest commit

 

History

History
88 lines (72 loc) · 2.04 KB

101md.md

File metadata and controls

88 lines (72 loc) · 2.04 KB

LeetCode 101. Symmetric Tree

##題目 Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

For example, this binary tree [1,2,2,3,4,4,3] is symmetric: But the following [1,2,2,null,3,null,3] is not: ##翻譯 給一個二元樹,判斷他是不是鏡像樹(從root為中心,左邊跟右邊為鏡像)。

範例:
[1,2,2,3,4,4,3]是鏡像樹

     1
   /   \
  2     2
 / \   / \
3   4 4   3  

[1,2,2,null,3,null,3]就不是鏡像樹

     1
   /   \
  2     2
   \     \
    3     3

##思路 判斷右邊是不是左邊的鏡像,就是先把右邊的樹反轉,再判斷是否與左邊的樹相等。 剛好怎麼把樹反轉在Invert Binary Tree有寫過,Same Tree也寫過,把這兩個組合起來就是本題的解了

##解題

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {boolean}
 */
var isSymmetric = function(root) {
    if(root == null || (root.right == null && root.left == null) ){
        return true;
    }

    // 先將right反轉,再比對是否相等
    root.right = revertTree(root.right);
    return isSameTree(root.left,root.right);

    // 反轉樹
    function revertTree(node){
        if(node == null || node.left == null && node.right == null){
            return node;
        }
        var temp = revertTree(node.left);
        node.left = revertTree(node.right);
        node.right = temp;
        return node;
    }
    
    
    // 比對是否相等
    function isSameTree(left,right){
        if(left == null && right== null){
            return true;
        }
        
        if(left == null && right != null || right == null &&left != null){
            return false;
        }
        
        if(left.val != right.val){
            return false;
        }
        
        return isSameTree(left.right, right.right) && isSameTree(left.left, right.left)
    }
};