【剑指offer-Java版】18树的子结构
2016-04-25 23:06
399 查看
树的子结构:输入两棵二叉树A B,判断B是不是A的子结构
就是一个递归加上一个树的先序遍历
测试代码:
就是一个递归加上一个树的先序遍历
public class _Q18 { public boolean HasSubTree(BinaryTreeNode tree1, BinaryTreeNode tree2) { if (tree1 == null) return false; if (tree2 == null) return true; // 对于一棵空的树,默认是任何非空树都是包含空树的 boolean result = false; if (tree1.value == tree2.value) { result = DoesTree1HasTree2(tree1, tree2); } if (!result) { // 如果没找到就在左子树中寻找 result = HasSubTree(tree1.leftChild, tree2); } if (!result) { // 如果仍然没有找到就在右子树中寻找 result = HasSubTree(tree1.rightChild, tree2); } return result; } private boolean DoesTree1HasTree2(BinaryTreeNode tree1, BinaryTreeNode tree2){ if(tree2 == null) return true; if(tree1 == null) return false; boolean result = false; if(tree1.value != tree2.value){ return false; }else{ result = DoesTree1HasTree2(tree1.leftChild, tree2.leftChild) && DoesTree1HasTree2(tree1.rightChild, tree2.rightChild); } return result; } }
测试代码:
public class _Q18Test extends TestCase { _Q18 subTree = new _Q18(); public void test(){ BinaryTreeNode node0 = new BinaryTreeNode(); BinaryTreeNode node1 = new BinaryTreeNode(); BinaryTreeNode node2 = new BinaryTreeNode(); BinaryTreeNode node3 = new BinaryTreeNode(); BinaryTreeNode node4 = new BinaryTreeNode(); BinaryTreeNode node5 = new BinaryTreeNode(); BinaryTreeNode node6 = new BinaryTreeNode(); BinaryTreeNode node7 = new BinaryTreeNode(); BinaryTreeNode node8 = new BinaryTreeNode(); BinaryTreeNode node9 = new BinaryTreeNode(); node0.value = 8; node1.value = 8; node2.value = 7; node3.value = 9; node4.value = 2; node5.value = 4; node6.value = 7; node7.value = 8; node8.value = 9; node9.value = 2; // 改动以修改成一棵不在tree1中的子树 node0.leftChild = node1; node0.rightChild = node2; node1.leftChild = node3; node1.rightChild = node4; node4.leftChild = node5; node4.rightChild = node6; node2.leftChild = null; node2.rightChild = null; node3.leftChild = null; node3.rightChild = null; node5.leftChild = null; node5.rightChild = null; node6.leftChild = null; node6.rightChild = null; node7.leftChild = node8; node7.rightChild = node9; node8.leftChild = null; node8.rightChild = null; node9.leftChild = null; node9.rightChild = null; System.out.println(subTree.HasSubTree(null, node7)); } }
相关文章推荐
- 【剑指offer-Java版】17合并两个排序链表
- 【剑指offer-Java版】16反转链表
- jquery对原生方法的使用
- nodejs原理
- javascript中的slice
- GIT 分支管理:分支管理策略、Bug分支、Feature分支
- [jQuery] 事件 方法
- 【剑指offer-Java版】15链表中倒数第K个结点
- 【剑指offer-Java版】14调整数组顺序使奇数位于偶数前面
- Javascript获取页面元素相对和绝对位置
- 【剑指offer-Java版】13O(1)时间删除链表结点
- JS实现全屏页面切换
- asp.net EF+MVC+Bootstrap 通用后台管理系统
- js生成指定格式的时间(yyyymmddHHmiss)
- 【步兵 工具篇】 Excel 转 json
- 【剑指offer-Java版】12打印1到最大的n位数
- 【剑指offer-Java版】11数值的整数次方
- RxJS入门(2)---Observable的介绍
- 剑指Offer--二维数组查找
- maven工程如何引用css和js文件