动画:面试必刷之二叉树的子结构

作者 |  小鹿

来源 |  小鹿动画学编程

题目

输入两棵二叉树 A 和 B,判断 B 是不是 A 的子结构。

如下给你两棵树:

问题分析

我们要判断一个二叉树是否为另一个二叉树的子结构,如图,判断二叉树 B 是否为二叉树 A 的子结构,就需要从二叉树的 A 的根节点和二叉树 B 的根节点起开始判断。

如果两个二叉树的根节点相同的时候,我们就分别递归判断剩余的结点是否相同,如果相同,则 B 为 A 的子结构,否则,我们就判断其他的 A 的子结构是否和 B 的结构相同。

既然问题我们已经分析清楚了,我们开始手写代码。

动画实现

代码拆解

第一步,判断传入的两棵树是否为空,如果 A 树为空,则返回null。如果 B 树为空,则是 A 树的子结构返回 true。

1// 匹配的返回值
2const result = false;
3
4// 判断两棵树是否为空
5if(NodeA == null || NodeB == null){
6  return null;
7}

第二步,如果两棵树不为空,则判断两棵树的根节点是否相同。

1// 根节点相等就进行匹配
2if(NodeA.data == NodeB.data){
3   result = match(NodeA,NodeB);
4}

第三步,如果两棵树的根节点相同,则进行匹配。匹配过程是一个递归的过程。

 1// 开始匹配
 2const match = (NodeA,NodeB)=>{
 3     // 终止条件
 4     if(nodeB == null){
 5        return true;
 6     }
 7     if(nodeA == null){
 8         return false;
 9     }
10     // 如果匹配的当前结点相等,继续匹配下面的结点
11     if(nodeA.data == nodeB.data){
12         return match(NodeA.left,NodeB.left) && match(NodeA.right,NodeB.right);
13     }else{
14         return false;
15     }
16}

第四步,如果两棵树根节点不相同,则也对其余节点进行递归遍历,找其他树节点是否存在根节点相同的节点。

1 // 判断上述过程是否匹配成功
2 if(result){
3         return true;
4 }
5 // 继续匹配其他节点
6 return matchTree(NodeA.left,NodeB) || matchTree(NodeA.right,NodeB)

代码实现

JavaScript 版本

Java 版本

Python 版本

测试用例

  • 是子结构、不是子结构 —— 普通测试。

  • 只有左子节点、只有右子节点、只有一个结点 —— 特殊测试。

  • 空树 —— 输入测试。

推荐阿里云推广服务器89/年,229/3年,买来送自己,,买了搭建个项目给面试官看也香,还可以熟悉技术栈,(老用户用家人账号买就好了,我用我妈的????)。扫码购买 

凡是从我这里购买的,我都返现 10元 给大家哈,相当于79元一年,比在其它渠道那里买便宜一些。

我这里还有购买后的教程:搭建教程,从0开始一步一步带你搭建 

------  END  ---------

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。关注公众号并回复 888 领取,更

【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值