判断一棵二叉树是否是对称二叉树。对称二叉树的定义就是左子树跟右子树是反着的。
也是一道递归的题目,跟27题差不太多的思路。子问题的处理方式是对于给定的两棵树,必须同时满足以下三个条件才是两颗对称的树:
- 判断其根节点是否一样
- 判断第一棵树的左子树是否和第二棵树的右子树一样
- 判断第一棵树的右子树是否和第二棵树的左子树一样。
递归的终止条件是:
- 空节点 ==> 返回真
- 叶子结点 ==> 返回真
- 左子树或者右子树只有一者为空 ==> 返回假
翻译成代码:
boolean isSymmetrical(TreeNode pRoot)
{
return pRoot == null || core(pRoot.left, pRoot.right);
}
boolean core(TreeNode left, TreeNode right) {
if(left == null && right == null) {
return true;
}
if(left == null || right == null) {
return false;
}
if(left.val != right.val) {
return false;
}
return core(left.left, right.right) && core(left.right, right.left);
}