题目描述:
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
解题思路:
本题判断一棵树是不是对称的,和第18题可以对比分析:二叉树的镜像。
《剑指Offer》中给出的解答是定义一种先遍历右子结点,再遍历左子结点的新遍历方法,称为前序遍历的对称遍历,实际上,我们不用这样,可以直接找到对称二叉树的规律:
对称二叉树满足:根结点的左右子树相同,左子树的左子树和右子树的右子树相同,左子树的右子树和右子树的左子树相同即可。
根据以上规律,直接使用递归便可以写出对应的代码,并不难理解,可以结合以下几个实例进行分析。
举例:
编程实现(Java):
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Solution {
boolean isSymmetrical(TreeNode pRoot){
//左的左,和右的右进行比较,左的右和右的左比较
if(pRoot==null)
return true;
return isSymmetrical(pRoot.left,pRoot.right);
}
boolean isSymmetrical(TreeNode pleft,TreeNode pright){
if(pleft==null && pright==null)
return true;
if(pleft==null || pright==null)
return false;
if(pleft.val!=pright.val)
return false;
return isSymmetrical(pleft.left,pright.right) && isSymmetrical(pleft.right,pright.left);
}
}