题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
解题思路
最初的想法是考虑一个节点的两个子节点的值是否相等,但是如果树的深度>2,就会得到错误结果了。
看书上的思路是这样的:考虑先序遍历,先遍历根节点,再左孩子,最后右孩子。如果是一个对称的二叉树,先遍历右孩子,再遍历左孩子得到的结果应该是一致的。利用递归的思想就可以解决这个问题了。
需要注意的是判断false的条件:
1.只有一个为null(因为上一个判断条件是两个都为null才成立,所以这条判断语句中只要有一个为null则另一个一定非空)
2.判断当前两个根节点的值是否相等
代码实现
/*
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)
{
TreeNode p1 = pRoot;
TreeNode p2 = pRoot;
return isSymmetrical(p1, p2);
}
boolean isSymmetrical(TreeNode p1, TreeNode p2) {
if(p1 == null && p2 == null) {
return true;
}
if(p1 == null || p2 == null) {
return false;
}
if(p1.val != p2.val) {
return false;
}
return isSymmetrical(p1.left, p2.right) && isSymmetrical(p1.right, p2.left);
}
}
本文介绍了一种判断二叉树是否对称的方法,通过递归比较左右子树的镜像来实现。首先,检查两个节点是否同时为空,然后验证它们的值是否相等,最后递归检查左子树和右子树的对称性。
&spm=1001.2101.3001.5002&articleId=88563013&d=1&t=3&u=f41a725c1a644630a99178b0829549b4)
768

被折叠的 条评论
为什么被折叠?



