给定一个二叉树,检查它是否是镜像对称的。

原题

给定一个二叉树,检查它是否是镜像对称的。

原理

以根节点划分中心线,检查是否镜像对称。
给定一个二叉树,检查它是否是镜像对称的。_第1张图片
一个指向从左节点出发,一个节点从右节点出发比较。

  • 左节点的左孩子和右节点的右孩子比较
  • 左节点的右孩子和右节点的左孩子比较

一旦不符合(非对称/值不相同)就返回false
直到叶子节点的空节点仍然没有false,就返回true

代码

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) {
        //一旦不符合就返回false
        //如果能遍历到叶子节点说明为true
        if(left==null && right==null) {
            return true;
        }
        //一个空一个非空返回false
        if(left==null || right==null) {
            return false;
        }
        //值不同返回false
        if(left.val!=right.val) {
            return false;
        }
        //左节点的左孩子和右节点的右孩子比较
        //左节点的右孩子和右节点的左孩子比较
        return dfs(left.left,right.right) 
        &&dfs(left.right,right.left);
    }
}
//https://leetcode-cn.com/problems/symmetric-tree/solution/dong-hua-yan-shi-101-dui-cheng-er-cha-shu-by-user7/

你可能感兴趣的:(java)