前面一篇文章介绍了如何判断两棵树相等,思路就是遍历每个节点,然后判断是否均相等,需要用递归来实现。如果需要判断一棵树是另一棵树的子树,该怎么办呢?我们需要借助前面的思路,需要先判断两棵树相等,这里就是判断一棵树是另一棵树的一部分,也就是说如果是子树,那么这棵小树肯定是这棵大树某一个节点的子节点以及子孙节点组成的一部分。可以用到前面判断相等的方法。假定我们有两棵树的根节点,分别为t1,t2,如果我们判断t1.left和t2是相等的,或者是t1.right和t2是相等的,那么可以判断t2就是t1的子树。

按照上面的思路,我们可以写出这样的程序。

package com.xxx.algorithm.wh;
public class Tree {public static class TreeNode{int data;public TreeNode(int data) {this.data = data;this.left = null;this.right = null;}TreeNode left;TreeNode right;}public static boolean equals(TreeNode t1,TreeNode t2){if(t1==null&&t2==null)return true;if(t1==null||t2==null)return false;return t1.data==t2.data && equals(t1.left, t2.left) && equals(t1.right, t2.right);}public static boolean subTree(TreeNode t1,TreeNode t2){if(t1==null)return false;if(equals(t1, t2))return true;return subTree(t1.left, t2) || subTree(t1.right, t2);}public static void main(String[] args) {//      a            b//------------------------//      10//     /  \//    9    8          9//   / \             / \//  7   6           7   6TreeNode a1 = new TreeNode(10);TreeNode a2 = new TreeNode(9);TreeNode a3 = new TreeNode(8);TreeNode a4 = new TreeNode(7);TreeNode a5 = new TreeNode(6);a1.left = a2;a1.right = a3;a2.left = a4;a2.right = a5;TreeNode b1 = new TreeNode(9);TreeNode b2 = new TreeNode(7);TreeNode b3 = new TreeNode(6);b1.left = b2;b1.right = b3;System.out.println("subTree(a,b)="+subTree(a1, b1));}}

运行程序,打印信息如下:

subTree(a,b)=true

这里我们直接通过节点之间的关系构建了两棵树,分别是a,b,b是a的根节点的左子树,这里通过程序代码判断,是正确的,如果我们修改节点,那么判断就会返回假:

判断一棵树是否是另一棵树的子树(Java实现)相关推荐

  1. 海量数据:判断一棵树是否为另一棵树的子树

    T1是一棵含有几百万个节点的树,T2含有几百个节点.判断T2是否是T1 的子树. 首先考虑小数据量的情况,可以根据树的前序和中序遍历所得的字符串,来通过判断T2生成的字符串是否是T1字符串的子串,来判 ...

  2. 二叉树 判断一棵树是否是另一棵树的子树

    题目:判断判断一棵树是否是另一棵树的子树,子树的意思是只要包含了一个结点,就得包含这个结点下的所有节点.意思就是二叉树结点的值也要相等 如下图2就是1的子树 如果将第二颗树根节点右孩子data改为2 ...

  3. 判断一棵树是否为另一棵树的子树

    题目如下: 判断一棵树是否为另一棵树的子树 思路: (1)先构建两棵树,a树和b树,判断b树是否为a树的子树 (2)构建两个方法,一个用来判断传入的两棵树是否相同,为isSameTree:另一个用来判 ...

  4. 折半查找判定树——(快速判断某棵树是否为折半查找判定树)

    折半查找 也被称作二分查找,即将需要查找的元素与数组中间的元素进行比较:若比中间的元素小,则再与前子表的中间元素进行比较,以此类推直至查找到所需查找元素,或者所需查找元素不在此表中. 折半查找判定树( ...

  5. 判断一棵树是否是另一棵树的子树

    bool containsTree(TreeNode t1, TreeNode t2) { if (t2 == NULL)//空树一定是子树 { return true; } return subTr ...

  6. 一棵树是否为另一棵树的子结构

    题目描述 输入两颗二叉树A,B,判断B是不是A的子结构. 问题描述:给定两个二叉树的根节点,判断第二树是否是第一个树的子树,如果是返回1,否则返回0. 分析:这个是百度的一道笔试题目,属于经典的数据结 ...

  7. 一棵树是否为另一棵树的子树

    问题描述:给定两个二叉树的根节点,判断第二树是否是第一个树的子树,如果是返回1,否则返回0. 分析:这个是百度的一道笔试题目,属于经典的数据结构问题,子树判断问题,针对这个问题可以采用递归的方法判断, ...

  8. 树的应用:求树的叶子节点数 求树的高度、copy一棵树

    #if 0 //树的应用 //1.求树的叶子节点: 度为0的节点 //先判断根节点是否是叶子节点,然后计算左子树的叶子节点个数 //在计算 右子树节点个数void coutLeaf(BiNode *T ...

  9. LeetCode高频题:戈壁滩种树,一排n棵树,至少有k棵树存活时,最终形成的风景线有多少不同的情况

    LeetCode高频题:戈壁滩种树,一排n棵树,至少有k棵树存活时,最终形成的风景线有多少不同的情况 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是 ...

  10. Python 再说勾股树,这次整一棵五彩的任意“生长”的分形树!

    上一篇<Turtle库画一棵对称勾股树,美丽惊艳的分形世界!>中描绘了一棵对称的双色勾股树,详情见:Python Turtle库画一棵对称勾股树,美丽惊艳的分形世界!_汉阳Hann's H ...

最新文章

  1. Centos7创建用户并授予sudo权限
  2. 记录密码的asp代码
  3. 回车无法直接提交当前光标所在控件中的数据
  4. C# == 和equals()区别
  5. poj 2187 Beauty Contest(凸包求解多节点的之间的最大距离)
  6. python自动化测试脚本怎么编写_【Python + uiautomator2】之编写unittest自动化测试脚本...
  7. 【开发经验】在Flutter中使用dart的单例模式
  8. sql server 配置管理器里为什么是32位_Windows Server2012 配置打印服务器图文教程
  9. python库--requests
  10. 在我看来,代码审查就是在排大便...
  11. hive udf 分组取top1_Hive中UDF练习
  12. 联想台式主机拆机教程_联想r400拆机教程 拆解电脑没那么难
  13. Linux下进行微信小程序开发
  14. 阿里云Blink快速入门
  15. 谷歌浏览器打不开百度网页,其余搜索引擎都可以的解决办法
  16. Three.js 绘图之不规则路径 3D 墙体生成算法
  17. android 获取sn序列号
  18. 12-render函数
  19. 加权平均资本成本【读书笔记】
  20. 论文阅读--Adapted Dynamic Memory Network for Emotion Recognition in Conversation

热门文章

  1. Xshell7,xftp7连接liunx系统
  2. 在cmd中运行javac编译java文件报错: 编码GBK的不可映射字符、 非法字符: \65279
  3. TOJ2640 The nearest taller cow
  4. 周四直播预告云技术社区创始人·肖力坐镇主讲「办公场景下的企业安全建设指南」...
  5. 郭明錤:苹果5G基带芯片研发失败 2023年新款iPhone仍用高通芯片
  6. TC358840XBG HDMI 转 CSI 中文手册
  7. PHP阿拉伯数字与中文数字的转换,阿拉伯数字转中文数字,中文数字转阿拉伯数字(数字的读写)
  8. Spring Security是什么?
  9. 布隆(Bloom Filter)过滤器入门
  10. 用matlab绘制树叶,利用SolidWorks随形阵列功能绘制树叶