对称的二叉树(递归法)

题目

  • 给定一棵二叉树,判断其是否是自身的镜像(即:是否对称),如对称二叉树下图所示
    对称二叉树,来源牛客网

递归:
1、出口
2、解决一个小问题
3、调用自己

出口:

  1. 如果树为空树(写在递归函数外,否则每次都要进行判断),或者只有一个根节点,则树为对称二叉树
  2. 当左子树和右子树,其中一个没有时,则树不为对称二叉树
  3. 此时已经知道左右子树都存在,则需要判断左右子树的值是否相等,不相等则直接返回false
  4. 如果上述都为真,则调用自身
  5. (题目来源牛网)
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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值