【二叉树】Leetcode 100. 相同的树【简单】

相同的树

  • 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

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

示例 1:


输入: p = [1,2,3], q = [1,2,3]
输出:true

解题思路

  • 比较当前节点的值是否相等。
  • 递归比较左子树。
  • 递归比较右子树。
  • 如果当前节点值相等,且左子树和右子树递归比较结果都为 true,则当前子树相同;否则不同。

Java实现

java 复制代码
public class SameTree {

    public static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) { val = x; }
    }

    public boolean isSameTree(TreeNode p, TreeNode q) {
        // 如果两棵树都为空,则它们是相同的
        if (p == null && q == null) {
            return true;
        }
        // 如果一个为空,另一个不为空,则它们不同
        if (p == null || q == null) {
            return false;
        }
        // 如果两个节点值不同,则它们不同
        if (p.val != q.val) {
            return false;
        }
        // 递归比较左子树和右子树
        return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
    }

    public static void main(String[] args) {
        SameTree solution = new SameTree();

        // 创建两个示例树
        TreeNode p = new TreeNode(1);
        p.left = new TreeNode(2);
        p.right = new TreeNode(3);

        TreeNode q = new TreeNode(1);
        q.left = new TreeNode(2);
        q.right = new TreeNode(3);

        System.out.println(solution.isSameTree(p, q)); // 输出: true

        // 创建两个不同的树
        TreeNode r = new TreeNode(1);
        r.left = new TreeNode(2);

        TreeNode s = new TreeNode(1);
        s.right = new TreeNode(2);

        System.out.println(solution.isSameTree(r, s)); // 输出: false
    }
}

时间空间复杂度

  • 时间复杂度: O(n),其中 n 是两棵树中节点的数量。需要遍历每个节点来进行比较。
  • 空间复杂度: O(h),其中 h 是树的高度。由于递归调用栈的深度等于树的高度,最坏情况下(完全不平衡的树)递归栈的深度等于 n(节点数)。
相关推荐
天上路人27 分钟前
AI神经网络降噪算法在语音通话产品中的应用优势与前景分析
深度学习·神经网络·算法·硬件架构·音视频·实时音视频
好吃的肘子30 分钟前
MongoDB 应用实战
大数据·开发语言·数据库·算法·mongodb·全文检索
汉克老师1 小时前
GESP2025年3月认证C++二级( 第三部分编程题(1)等差矩阵)
c++·算法·矩阵·gesp二级·gesp2级
sz66cm1 小时前
算法基础 -- 小根堆构建的两种方式:上浮法与下沉法
数据结构·算法
緈福的街口1 小时前
【leetcode】94. 二叉树的中序遍历
算法·leetcode
小刘要努力呀!1 小时前
嵌入式开发学习(第二阶段 C语言基础)
c语言·学习·算法
野曙2 小时前
快速选择算法:优化大数据中的 Top-K 问题
大数据·数据结构·c++·算法·第k小·第k大
Codeking__3 小时前
”一维前缀和“算法原理及模板
数据结构·算法
休息一下接着来3 小时前
C++ 条件变量与线程通知机制:std::condition_variable
开发语言·c++·算法
Code哈哈笑3 小时前
【机器学习】支持向量回归(SVR)从入门到实战:原理、实现与优化指南
人工智能·算法·机器学习·回归·svm