请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
例如,二叉树 [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
/**
* Definition for a binary tree node.
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int x) { val = x; }
* }
*/
//所谓和它的镜像一样,就是将二叉树用上一题的算法镜像之后,得到的新二叉树和原来的一样
//但是本题没有必要先进行镜像操作再去比较,原因如下:
//镜像后的二叉树需要和原树比较,因此必须生成一颗新的镜像后的二叉树,额外需要O(n)的空间和O(n)O(n)的空间和O(n)的时间
//可以有更直接的方法判断当前二叉树是否对称
//若二叉树要对称,需要满足root的左子树和右子树对称
//两颗子树对称,需要满足:
//子树的根节点的val相等
//子树1的左子树和子树2的右子树对称 并且 子树1的右子树和子树2的左子树对称
//若两颗子树都是null,也算对称
//时间复杂度O(n),空间复杂度O(h),hO(n),空间复杂度O(h),h为二叉树的高度
public class Solution {
public bool IsSymmetric(TreeNode root) {
if(root==null){
return true;
}
return IsSymmetricInternal(root.left,root.right);
}
public bool IsSymmetricInternal(TreeNode a,TreeNode b){
if(a==null&&b==null){
return true;
}
if(a==null||b==null){
return false;
}
if(a.val!=b.val){
return false;
}
return IsSymmetricInternal(a.left,b.right)&&IsSymmetricInternal(a.right,b.left);
}
}
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/dui-cheng-de-er-cha-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。