leetcode-对称的二叉树
基本思路
基本思路就是通过递归来判断
对于根节点,就是判断左子树和右子树是否相等,从根节点开始递归。
之后判断左子树和右子树是否相等,具体为:
1.如果左右子树都是空的,则相等
2.如果存在一个为空一个不为空,则不相等
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) {
if(root == null) return true;
TreeNode left = root.left,right = root.right;
return is(left,right);
}
public boolean is(TreeNode left,TreeNode right){
if(left == null && right == null) return true;
else if(left!=null && right!=null){
if(left.val == right.val){
return true&&is(left.left,right.right)&&is(left.right,right.left);
}else{
return false;
}
}
else{
return false;
}
}
}