[LeetCode] 101. 對稱二叉樹

1 題目描述

給定一個二叉樹,檢查它是否是鏡像對稱的。

例如,二叉樹 [1,2,2,3,4,4,3] 是對稱的。

在這裏插入圖片描述
但是下面這個 [1,2,2,null,3,null,3] 則不是鏡像對稱的:

在這裏插入圖片描述
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/symmetric-tree
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

2 解題思路

採用的方法是遞歸,參照遞歸套路三部曲來做,遞歸題目的詳細瞭解和總結,可以看另一篇博客 套路俘虜–遞歸–的芳心,就是你,沒錯了~~,非常簡潔容易理解

  • 第一步,找終止條件
    都爲空指針則返回 true
    只有一個爲空則返回 false

  • 第二步,判斷本層遞歸做什麼,遞歸過程就是去比較是不是對稱
    判斷兩個指針當前節點值是否相等
    判斷 A 的右子樹與 B 的左子樹是否對稱
    判斷 A 的左子樹與 B 的右子樹是否對稱

  • 第三步,返回值
    返回值在這裏, 指的是到底是不是對稱,true 或者 false 的布爾值
    寫代碼的時候,二三步合併了
    這裏牽扯到短路現象:
    在遞歸判斷過程中存在短路現象,也就是做 與 操作時,如果前面的值返回 false 則後面的不再進行計算

3 解決代碼

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isSymmetric(TreeNode root) {
        return isMirror(root, root);
    }
    public boolean isMirror(TreeNode t1, TreeNode t2){
        //第一步,遞歸結束條件:都爲空指針則返回 true,只有一個爲空則返回 false
        if(t1 == null && t2 == null) return true;
        if(t1 == null || t2 == null) return false;
        //第二步,遞歸過程,判斷到底是不是對稱,分情況分析
        //第三步,返回值,返回是否對稱的布爾值
        return (t1.val == t2.val) && isMirror(t1.right,t2.left) && isMirror(t1.left,t2.right);
    }
}
發佈了242 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章