博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
判断一个树是不是另一个树的子树,深度好文
阅读量:3905 次
发布时间:2019-05-23

本文共 1588 字,大约阅读时间需要 5 分钟。

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

首先要明白在java中用TreeNode来表示数结构

//树的结构:public class TreeNode {
int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) {
this.val = val; }}
//解决方法如下:public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
//首先判断当前节点是否为空:如果root1本身或者root2为空,那么就不存在子结构这样的说法了 if(root1==null||root2==null){
return false; } //首先对根节点进行判断,如果从根节点就匹配到了,那么就可以不进行下面的代码了, //因此可以使用短路的结构,如果第一个条件满足,那么就直接退出,如果第一个条件不满足,接着进行 //第二个条件,如果第二个条件满足,就不用进行第三个条件的判断,如果第二个条件不满足才进行第三个 //条件的判断。 return judge(root1,root2)||judge(root1.left,root2)||judge(root1.right,root2); //再解释一下首先拿两个根节点进行比较,如果匹配到了,返回了true,就直接退出了。如果返回了false,就拿root1节点的左节点跟root2比较,如果发现root1 //的左孩子节点的跟root2匹配上了,返回true,就不用再进行下一个判断了。否则,还有看看root1的右孩子节点跟root2的匹配情况。 } public boolean judge(TreeNode t1,TreeNode t2){
//前面的两个if也可以理解为递归的结束条件。 if(t2==null){
//这句话的意思是如果t2为空,说明遍历完成了,也就是所谓的找到了子树 return true; } if(t1==null){
//这句话的意思代表,t2还没为空,而主数已经为空了,那么说明主树还没有 //子树长,那么可以直接退出。 return false; } //对t1与t2进行值的判断 if(t1.val==t2.val){
//相等 //判断节点的左节点与子树的左节点是否相同,不相同直接短路退出, //返回false,如果相同再判断该节点的右节点是否跟子树节点的右节点是否相同. return judge(t1.left,t2.left)&&judge(t1.right,t2.right); } else{
//不相等 return false; } }}

转载地址:http://drlen.baihongyu.com/

你可能感兴趣的文章
ORA RAC ORA-12545:因目标主机或对象不存在,连接失败!
查看>>
证明两节点能正常failover的sql
查看>>
oracle10g rac 报ora-12545错误的解决方案 转载
查看>>
Linux配置Xmanager
查看>>
IP地址正则表达式
查看>>
对SOAP消息头的处理
查看>>
webservice TCP Monitor
查看>>
Oracle中sysdate的时区偏差
查看>>
【每日一算】旋转有序数组
查看>>
【每日一算】两数之和
查看>>
深入理解Mysql索引底层数据结构与算法
查看>>
B+树算法在mysql中能存多少行数据?
查看>>
【vue学习】—条件判断、循环遍历
查看>>
【vue学习】—slot插槽的使用
查看>>
怎样做研究
查看>>
labview 局部变量问题
查看>>
labview 循环外部与数组相连时问题
查看>>
哈佛大学凌晨4点半的景象--哈佛图书馆的二十条训言
查看>>
Outlook2010到处通讯录
查看>>
Gmail导入通讯录
查看>>