LeetCode - 100. Same Tree 判断两棵树是否完全相同 简单题

发布于 2024-08-18 14:36:45 字数 2077 浏览 9 评论 0

题目

递归

这题比较简单。分为五种情况:

  • p、q 都为空,返回 true
  • p == null && q != null 返回 false
  • p != null && q == null 返回 false
  • p.val != q.val 返回 false
  • p.val == q.val ---> 去判断他们的左右子树是否相等(递归);
class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        if (p == null && q == null)
            return true;
        if (p == null || q == null)
            return false;
        return p.val == q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
    }
}

非递归

这个也很简单:

  • 栈中保存两棵树的节点即可(使用数组),当然也可以使用两个栈;
  • 然后利用前序非递归类似的方式非递归,判断条件还是和递归一样,只不过改成了非递归而已。
class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        if (p == null && q == null)
            return true;
        if (p == null || q == null)
            return false;
        Stack<TreeNode[]> stack = new Stack<>();
        stack.push(new TreeNode[]{p, q});
        while (!stack.isEmpty()) {
            TreeNode[] top = stack.pop();
            if (top[0] == null && top[1] == null)
                continue;
            if (top[0] == null || top[1] == null)
                return false;
            if (top[0].val != top[1].val)
                return false;
            stack.push(new TreeNode[]{top[0].left, top[1].left});
            stack.push(new TreeNode[]{top[0].right, top[1].right});
        }
        return true;
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

分开我的手

暂无简介

0 文章
0 评论
24 人气
更多

推荐作者

玍銹的英雄夢

文章 0 评论 0

我不会写诗

文章 0 评论 0

十六岁半

文章 0 评论 0

浸婚纱

文章 0 评论 0

qq_kJ6XkX

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文