题目
- 给定一棵二叉树,判断其是否是自身的镜像(即:是否对称),如对称二叉树下图所示
递归:
1、出口
2、解决一个小问题
3、调用自己
出口:
- 如果树为空树(写在递归函数外,否则每次都要进行判断),或者只有一个根节点,则树为对称二叉树
- 当左子树和右子树,其中一个没有时,则树不为对称二叉树
- 此时已经知道左右子树都存在,则需要判断左右子树的值是否相等,不相等则直接返回false
- 如果上述都为真,则调用自身
- (题目来源牛网)
bool _judge_binary(struct TreeNode *root1,struct TreeNode *root2)
{
if(NULL == root1 && NULL == root2) return true;//只有跟节点
if(NULL == root1 || NULL == root2) return false;//左右之一是否为空
if(root1->val != root2->val) return false;//左右子树值是否相等
return _judge_binary(root1->left,root2->right) \
&& _judge_binary(root1->right,root2->left);
}
bool isSymmetrical(struct TreeNode* pRoot ) {
//空树是对称树
if(NULL == pRoot) return true;
return _judge_binary(pRoot->left,pRoot->right);
}