leetcode-对称二叉树
对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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
说明:
如果你可以运用递归和迭代两种方法解决这个问题,会很加分。
递归法: 两个节点A和B对称等价于:
这两个节点上存储的值相等
节点A的左子树节点和节点B的右子树上的节点是对称的
节点A的右子树节点和节点A的左子树上的节点是对称的
/** * 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) { if(root==null)return true; return isSymmetric(root.left,root.right); } public boolean isSymmetric(TreeNode left,TreeNode right){ //是上一个函数的重载,为了判断他的左子树和右子树对称 if(left==null&&right==null)return true; //如果是终端结点,返回true if(left==null)return false; if(right==null)return false; //如果有一边没有结点,一定不对称 return (left.val==right.val)&&isSymmetric(left.left,right.right)&&isSymmetric(left.right,right.left); //A和B两个结点对称的条件 } }