题目
思路
本题判断一棵二叉树是否对称,利用后序遍历,左--右--中的顺序
如果左节点为空,右节点不为空,不对称
如果左节点不为空,右节点为空,不对称
如果左节点为空,右节点也为空,对称
如果左节点的值不等于右节点,不对称
递归左节点的左节点和右节点的右节点,看他们是否对称,返回如果为true,则外侧相等
递归左节点的右节点和右节点的左节点,看他们是否对称,返回如果为true,则内侧相等
如果外侧和内侧同时为true,则这棵二叉树对称
代码
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root==null){
return true;
}
return compare(root.left,root.right);
}
public boolean compare(TreeNode left,TreeNode right){
if(left==null&&right!=null)return false;
else if(left!=null&&right==null)return false;
else if(left==null&&right==null)return true;
else if(left.val!=right.val) return false;
boolean outside = compare(left.left,right.right);
boolean inside = compare(left.right,right.left);
return outside&&inside;
}
}
收获
巩固了递归的思想,这道题的重点是后序遍历