剑指OFFER18 判断一个二叉树的子树
public class a18_IsSubTree {
public static boolean hasSubTree(TreeNode treeRoot1, TreeNode treeRoot2) {
boolean result = false;
if (treeRoot1 != null && treeRoot2 != null) {
if (treeRoot1.data == treeRoot2.data) {
result = DoesTree1HasTree2(treeRoot1, treeRoot2);
}
if (!result) {
result = hasSubTree(treeRoot1.left, treeRoot2);
}
if (!result)
result = hasSubTree(treeRoot1.right, treeRoot2);
}
return result;
}
private static boolean DoesTree1HasTree2(TreeNode treeRoot1, TreeNode treeRoot2) {
if (treeRoot2 == null)
return true;
if (treeRoot1 == null)
return false;
if (treeRoot1.data != treeRoot2.data) {
return false;
}
return DoesTree1HasTree2(treeRoot1.left, treeRoot2.left) && DoesTree1HasTree2(treeRoot1.right, treeRoot2.right);
}
public static void main(String[] args) {
TreeNode tree1 = new TreeNode(1);
TreeNode tree2 = new TreeNode(2);
TreeNode tree3 = new TreeNode(3);
TreeNode tree4 = new TreeNode(4);
TreeNode tree5 = new TreeNode(5);
TreeNode tree6 = new TreeNode(6);
TreeNode tree7 = new TreeNode(7);
TreeNode tree8 = new TreeNode(8);
tree1.left = tree2;
tree1.right = tree3;
tree2.left = tree4;
tree2.right = tree5;
tree3.left = tree6;
tree3.right = tree7;
tree4.left = tree8;
TreeNode tree11 = new TreeNode(2);
TreeNode tree22 = new TreeNode(4);
TreeNode tree33 = new TreeNode(8);
tree11.left = tree22;
tree22.left = tree33;
System.out.println(hasSubTree(tree1, tree11));
}
}
class TreeNode {
int data;
TreeNode left = null;
TreeNode right = null;
TreeNode(int data) {
this.data = data;
}
}
剑指OFFER18 判断一个二叉树的子树的更多相关文章
- 剑指offer——已知二叉树的先序和中序排列,重构二叉树
这是剑指offer中关于二叉树重构的一道题.题目原型为: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2, ...
- 力扣 - 剑指 Offer 55 - I. 二叉树的深度
题目 剑指 Offer 55 - I. 二叉树的深度 思路1(DFS) 后续遍历吧,先遍历到最深(递归到末尾返回0),然后从后面一步一步比较取大的值返回,每次返回层数都加1, 执行流程是怎样的:比如其 ...
- 《剑指offer》重建二叉树
本题来自<剑指offer> 重构二叉树 题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2 ...
- 剑指Offer:重建二叉树【7】
剑指Offer:重建二叉树[7] 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5 ...
- 剑指 Offer 68 - II. 二叉树的最近公共祖先 + 最近公共祖先(LCA)
剑指 Offer 68 - II. 二叉树的最近公共祖先 Offer_68_2 题目详情 题解分析 java代码 package com.walegarrett.offer; /** * @Autho ...
- 力扣 - 剑指 Offer 37. 序列化二叉树
目录 题目 思路 代码 复杂度分析 题目 剑指 Offer 37. 序列化二叉树 思路 序列化其实就是层序遍历 但是,要能反序列化的话,前.中.后.层序遍历是不够的,必须在序列化时候保存所有信息,这样 ...
- 剑指offer 判断树是不是对称的
html, body { font-size: 15px; } body { font-family: Helvetica, "Hiragino Sans GB", 微软雅黑, & ...
- 剑指offer---4、序列化二叉树
剑指offer---4.序列化二叉树 一.总结 一句话总结: 1. 对于序列化:使用前序遍历,递归的将二叉树的值转化为字符,并且在每次二叉树的结点不为空时,在转化val所得的字符之后添加一个' , ' ...
- 剑指 Offer 37. 序列化二叉树 + 二叉树的层次遍历
剑指 Offer 37. 序列化二叉树 Offer_37 题目描述 题目解析 本题主要考察的就是二叉树的层次遍历. 层次遍历时可以根据二叉树的特点将空结点也进栈. 反序列化时同样可以根据层次遍历的思路 ...
随机推荐
- java移位运算符详解
http://soft.chinabyte.com/database/195/11553695.shtml java移位运算符不外乎就这三种:<<(左移).>>(带符号右移)和 ...
- template.js文档
参见GitHub:https://github.com/yanhaijing/template.js/ template.js简介: template.js 一款javascript模板引擎,简单,好 ...
- Allegro skill
https://blog.csdn.net/wyu0725/article/details/52367199 Allegro skill二次开发和更改菜单页面 简单的使用skill;能够使Aleggr ...
- we are experimenting with a new init system and it is fun
http://0pointer.de/blog/projects/systemd.html Rethinking PID 1 If you are well connected or good at ...
- idea设置自定义图片
看图操作哈: 1. 2. 逼格满满:
- 李振杰:火狐Mozilla被黑事件的启发
火狐浏览器开发商Mozilla近日宣布,因为数据库存在漏洞.Mozilla开发者的数万个电子邮件地址和加密password或遭到黑客窃取. 好多有为青年们往往刚刚获得了一个小成功,便開始沾沾自喜,自命 ...
- HDFS源码分析心跳汇报之数据块汇报
在<HDFS源码分析心跳汇报之数据块增量汇报>一文中,我们详细介绍了数据块增量汇报的内容,了解到它是时间间隔更长的正常数据块汇报周期内一个smaller的数据块汇报,它负责将DataNod ...
- php html_entity_decode使用总结
在处理网页字符串的时候,尤其是做爬虫类的应用时,经常会涉及到要处理的字符串中包含html标签,现在对这类字符串的处理做一个小的总结: 有时候获取到的字符串中有html标签,在入库的时候出于安全的考虑通 ...
- Tinker 热修复框架 简单上手教程
当你们看到Tinker的时候是不是有点愣逼这个是什么东西? 简单来说就是不需要重新下载app和重新安装app 来进行更新app的技术框架. 看看这个吧,我也是才学习 ,先做个学习记录 参考:Tinke ...
- 为什么引入TSS
[0]README text description from orange's implemention of a os and for complete code ,please visit ht ...