Leetcode第100题 相同的树(递归) C++解法

这种一般有递归和迭代两种解法,先上递归因为之前对有返回值的递归一直捋不清思路。
第一次毫无疑问失败

class Solution {
public:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        if (p->left==nullptr&&p->right==nullptr&&q->right==nullptr&&q->right==nullptr)
        return true;
        if((p->left==nullptr&&q->left!=nullptr)||(p->right!=nullptr&&q->right==nullptr))
        return false;
        if(p->val==q->val)
        return true;
        return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
    }
};

问题很多,首先第一个终止条件有问题,不应该是判断该结点的左右节点,到达终止条件时,应该已经到nullptr叶子节点了。
然后第二个判定也有问题,太啰嗦。第三个递归进行的不对,我写的这个根本没有递归,应该是判定相同后递归,判定不同后返回false。
又修改了两次后,得到下面的:

class Solution {
public:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        if (p == q)//叶子结点,所以都是nullptr时相等
            return true;
        else if (p == nullptr || q == nullptr)//前面已经排除两个都是null
            return false;
        else//不含有nullptr也就是都有值val时,要么进入递归,要么false
        {
            if (p->val == q->val)
                return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
                //直接在return中使用&&好点,这样第一个false就不会调用第二个了
            else
                return false;
        }
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值