请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
题解
- 原先的想法是想根据判空条件之后的递归来判断值是否相等
但是后来发现无法解决递归判断值的问题 - 所以需要转换思想,只能判断 root.left.val == root.right.val
- 所以需要重新创建一个函数,来解决刚才的比较问题。
- 这个函数的作用是递归比较两个节点
都为空
一个为空且一个不为空
两个节点的值不一样
随后递左子树的左孩子和右子树的右孩子 和 左子树的右孩子和右子树的左孩子
class Solution {
public boolean isSymmetricChild(TreeNode left,TreeNode right) {
if(left == null && right == null){
return true;
}
if(left == null && right != null){
return false;
}
if(left != null && right == null){
return false;
}
if(left.val != right.val){
return false;
}
return isSymmetricChild(left.left,right.right) && isSymmetricChild(left.right,right.left);
}
// 将树变成镜像对称树
public boolean isSymmetric(TreeNode root) {
if(root == null){
return true;
}
return isSymmetricChild(root.left,root.right);
}
}