对称二叉树.png
由图中,我们可以看出来如果将二叉树由中间 按竖线进行对折得话,他对折重合得节点是值是相同得。
从此我们可以得知,只要判断他对折得点是否相同即可。
大家由图就可以看出一个节点有两个子节点。我们每次需要对比的,,以 2 为例 我需要判断当前节点的值是否相同。 每次判断完当前节点之后,还要判断他的两个子节点的情况。
代码如下:
public boolean isSymmetric(TreeNode root) {
if(root == null ){
return true;
}
return isBo(root.left , root.right);
}
//TODO: 对比方法
public static boolean isBo(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 isBo(left.left, right.right) && isBo(left.right,right.left);
}
从代码中我们可以看出,isBo中的 三个if 是判断当前两个对称节点是否相同。
return isBo(left.left, right.right) && isBo(left.right,right.left);
这段代码指的是子节点之间的比较。。就是当前节点判断完毕之后,他们的两个子节点在互相对比。 && 指的是 只有当前节点的两个子节点都相同之后才会返回 true ,依次递归。如果感觉图太浅显的,大家可以在多画几层子节点进行梳理。
对比.png










网友评论