週三第五題 二叉樹的鏡像

   AcWing打卡活動

《劍指Offer》打卡活動 

週三第五題 二叉樹的鏡像

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 * 
 * 思路
 * 由樣例可以得出,對稱的二叉樹從外向內是對稱的,可利用這個特性
 * 即 left.left == right.right && left.right == right.left 構成了兩個遞歸條件,如下
 * dfs(left.left, right.right) && dfs(left.right, right.left)
 * 停止條件爲子節點爲空,當節點的左右子節點都爲null的時候,纔會停止並return true,會遍歷到最底層
 * 如果該節點有一個節點不爲null,一個節點爲null,則這棵樹不爲對稱的二叉樹
 */
class Solution {
    public boolean isSymmetric(TreeNode root) {
        // 如果樹爲空,則算對稱的二叉樹
        if(root == null) {
            return true;
        }
        return dfs(root.left, root.right);
    }
    
    public boolean dfs(TreeNode left, TreeNode right) {
        if(left == null || right == null) {
            // 只有連個子節點都爲空,纔有可能爲對稱的二叉樹,否則沒有資格
            return left == null && right == null;
        }
        
        return left.val == right.val && dfs(left.left, right.right) && dfs(left.right, right.left);
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章