LeetCode刷题笔记 100. 相同的树

100. 相同的树

题目要求

给定两个二叉树,编写一个函数来检验它们是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例 1:

输入:       1         1
          / \       / \
         2   3     2   3

        [1,2,3],   [1,2,3]

输出: true

示例 2:

输入:      1          1
          /           \
         2             2

        [1,2],     [1,null,2]

输出: false

示例 3:

输入:       1         1
          / \       / \
         2   1     1   2

        [1,2,1],   [1,1,2]

输出: false

题解

https://github.com/soulmachine/leetcode

递归

class Solution {
public:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        if(!p&&!q) return true;  //终止条件
        if(!p||!q) return false;  //剪枝
        return p->val==q->val
            && isSameTree(p->left,q->left)
            && isSameTree(p->right,q->right);
    }
};

迭代版

class Solution {
public:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        stack<TreeNode*> S;
        S.push(p);
        S.push(q);

        while(S.size()){
            p=S.top();S.pop();
            q=S.top();S.pop();
            if(!p&&!q) continue;  //这里不一样,不过话说为什么在stack里面转了一圈情况就变了呢
            if(!p||!q) return false;
            if(p->val!=q->val) return false;

            S.push(p->left);
            S.push(q->left);

            S.push(p->right);
            S.push(q->right);
        }
        return true;
    }
};

在这里插入图片描述
通过调试发现如果
if(!p&&!q) continue;
这条习惯性写成 if(!p&&!q) return true;
会在p->val=-5,q->val=-8时!p&&!q为真,不懂发生了什么
在这里插入图片描述

发布了18 篇原创文章 · 获赞 0 · 访问量 1785

猜你喜欢

转载自blog.csdn.net/g534441921/article/details/104203100