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

【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 的对象进行引用,必须特判它为空的情形// 待查找的树已经为空,无法进一步匹配,结果应该是 falseif(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.mrgr.cn/news/82064.html

相关文章:

  • Elasticsearch:基础概念
  • debian系linux安装mysql
  • 系统架构师考试-ABSD基于架构的设计方法
  • UE4.27 Android环境下获取手机电量
  • [Hive]七 Hive 内核
  • Linux-掉电保护方案
  • 初始nginx
  • 因数据库表被锁死导致服务假死的排查和解决过程
  • 混合合并两个pdf文件
  • vue实现下拉多选、可搜索、全选功能
  • Vue多页面路由与模版解析
  • 自动驾驶新纪元:城区NOA功能如何成为智能驾驶技术的分水岭
  • SpringAI从入门到熟练
  • FreeRTOS Lwip Socket APi TCP Server 1对多
  • 大模型WebUI:Gradio全解系列8——Additional Features:补充特性(上)
  • 小米路由器开启SSH,配置阿里云ddns,开启外网访问SSH和WEB管理界面
  • Isaac Sim Docker 中使用 Python 脚本
  • 一份关于 Ubuntu 系统下代理配置的故障排查笔记
  • Linux高并发服务器开发 第七天(静态库 动态库)
  • LVS 负载均衡原理 | 配置示例
  • Linux高级--3.2.4.2 常见的几种timer的设计方案
  • Java基本操作笔记
  • 协程原理 函数栈 有栈协程
  • 有限元分析学习——Anasys Workbanch第一阶段笔记(2)应力奇异及位移结果对比、初步了解单元的基本知识
  • 大数据组件(一)快速入门调度组件Airflow
  • 人形机器人全身运动规划相关资料与文章