当前位置: 首页 > article >正文

【Leetcode 每日一题 - 扩展】面试题 04.10. 检查子树

问题背景

检查子树。
你有两棵非常大的二叉树: T 1 T_1 T1,有几万个节点; T 2 T_2 T2,有几万个节点。
设计一个算法,判断 T 2 T_2 T2 是否为 T 1 T_1 T1 的子树。
如果 T 1 T_1 T1 有这么一个节点,其子树与 T 2 T_2 T2 一模一样,则 T 2 T_2 T2 T 1 T_1 T1 的子树,也就是说,从此处把树砍断,得到的树与 T 2 T_2 T2 完全相同。

数据约束

  • 两棵树上的节点数目都在范围 [ 0 , 100 ] [0, 100] [0,100]
  • − 1 0 4 ≤ N o d e . v a l ≤ 1 0 4 -10 ^ 4 \le Node.val \le 10 ^ 4 104Node.val104

解题过程

在节点上判断两棵树是否是 相同的树,递归检查所有节点即可。

具体实现

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean checkSubTree(TreeNode t1, TreeNode t2) {
        // 底下要用对 t1 的对象进行引用,必须特判它为空的情形
        // 待查找的树已经为空,无法进一步匹配,结果应该是 false
        if(t1 == null) {
            return false;
        }
        // 当前节点上两树是同一棵树的情况下,递归判断左右子树
        return isSameTree(t1, t2) || checkSubTree(t1.left, t2) || checkSubTree(t1.right, t2);
    }

    // Leetcode 100.相同的树
    private boolean isSameTree(TreeNode p, TreeNode q) {
        if(p == null || q == null) {
            return p == q;
        }
        return p.val == q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
    }
}

http://www.kler.cn/a/460119.html

相关文章:

  • 单片机串口控制
  • springboot 跨域配置
  • 利用多GPU,推理transformer模型,避免显存溢出
  • HTML——57. type和name属性
  • 【Java回顾】Day2 正则表达式----异常处理
  • Flink源码解析之:如何根据JobGraph生成ExecutionGraph
  • FreeSWITCH 简单图形化界面38 - 使用uniapp中使用JsSIP进行音视频呼叫
  • Windows11家庭版 Docker Desktop 的安装历程
  • VITUREMEIG | AR眼镜 算力增程
  • 你了解DNS吗?
  • 让每一条数据发光:Grafana 打造的现代化仪表盘
  • 多分类的损失函数
  • 深度学习论文: RemDet: Rethinking Efficient Model Design for UAV Object Detection
  • 数据结构(顺序队列)
  • LCE软机器人登场!热场光控下的多模态运动传奇?
  • 多目标应用(一):多目标麋鹿优化算法(MOEHO)求解10个工程应用,提供完整MATLAB代码
  • Zabbix 监控平台 添加监控目标主机
  • 单元测试中创建多个线程测试 ThreadLocal
  • C++系列之构造函数和析构函数
  • 龙迅#LT9711UX适用于双端口 MIPI DPHY/CPHY 转 DP1.4 产品应用,分辨率高达4K120HZ。
  • c++表达范围勿用数学符号
  • TCP-IP入门
  • 架构与通信机制:深入解析JMediaDataSource的JNI实现
  • 【每日学点鸿蒙知识】placement设置top、组件携带自定义参数、主动隐藏输入框、Web设置字体、对话框设置全屏宽
  • 静默模式下安装Weblogic 14.1.1.0.0
  • 医院大数据平台建设:基于快速流程化工具集的考察