练习题:对称二叉树
- 题目要求
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [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
解:
本题用递归解法的话,代码相对更好编写一些。
问题在于如何递归:
首先可以知道,如果给的树是一棵空树,那么一定是一颗对称二叉树。否则,只要判断根节点的左右节点是否是对称的,就可以知道这是不是一颗对称二叉树。
那么如何判断左右子树是否对称呢,我们需要一个辅助函数来完成,函数需要的参数就是两棵树。从实例中可以得到,当左子树做孩子和右子树的右孩子对称,左子树的右孩子和右子树的左孩子对称时,这两棵树就对称。根据这个想法编码即可得到解。
代码如下(JAVA):
public boolean sam(TreeNode lef,TreeNode righ){
if(lef==null&&righ==null){
return true;
}
if(lef == null || righ == null) {
return false;
}
if(lef.val==righ.val){
if((sam(lef.left,righ.right))&&(sam(lef.right,righ.left))){
return true;
}
}
return false;
}
public boolean isSymmetric(TreeNode root) {
if(root==null){
return true;
}
if(sam(root.left,root.right)){
return true;
}
return false;
}
来源:力扣(LeetCode)