题意理解
给出一个二叉树,分析是否对称?
问题分析
copy一个同样的树出来,分别比较一个树的左子树和另一个树的右子树是否相同。
递归思想,异常情况的处理:
如果两个树对应的子树都为空,对称;
如果两个树有一个为空,非对称;
如果两个树对应的子树root值相同,且一个数的左子树等于另一个右子树。
其他
一个树本身对称比较麻烦,拷贝出一个树就容易了。学习
注意异常的处理。
bool isSymmetric(TreeNode* root) {
return isMirror(root, root); //判断两树是否是镜像
}
bool isMirror(TreeNode* lTree, TreeNode* rTree)
{
if (lTree == NULL && rTree == NULL) //如果两数都是空树,true
return true;
if (lTree == NULL || rTree == NULL) //如果只有一个是空树,false
return false;
return (lTree -> val == rTree -> val) //根相等
&& isMirror(lTree -> left, rTree -> right) //左树左子树镜像右树右子树
&& isMirror(lTree -> right, rTree -> left); //左树右子树镜像右树左子树
链接
无