给定一个二叉树,检查它是否是镜像对称的。
来源:力扣(LeetCode)101题
链接:https://leetcode-cn.com/problems/symmetric-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
树的方法还是想到递归,不过这个递归需要构造一个辅助的方法。
因为一个二叉树镜像对称的条件是
它的两个子树相互对称 找没有递归的条件。
但两个树AB对称的条件是
1)两个根结点相等
2)A的左子树和B的右子树对称
3)A的右子树和B的左子树对称
这样我们才能找到一个递归(两个树对称)
所以就需要一个辅助方法 asit(); 去判断两个树是否对称。
同样如同上一题,我们需要看一下在叶子处两个条件有什么变化。
1)直接判断,没有变化
2)A的左子树和B的右子树都是null,所以asit(null,null);需要返回true
3)同2)
所以asit方法的代码如下
public bool asit(TreeNode p,TreeNode q)
{
if(p==null&&q==null) return true;
if(p==null||q==null) return false;
return (asit(p.left,q.right)&&asit(p.right,q.left)&&(p.val==q.val));
//最后一个return就是三个条件的判断和递归
}
而主方法的代码是
public bool IsSymmetric(TreeNode root) {
if(root==null) return true;
return asit(root.left,root.right);//调用asit方法
}