【笔试】36、树的子结构
2015-08-31 10:01
399 查看
我们数的结果,以及创建的类我们在
/article/1472231.html
已经从建过了,我们引入就可以了,不过 BinaryTreeNode里面的两个成员变量的权限最好改为public类型的,不然再写个get和set函数很麻烦,
毕竟java没有友元类这个玩意
/article/1472231.html
已经从建过了,我们引入就可以了,不过 BinaryTreeNode里面的两个成员变量的权限最好改为public类型的,不然再写个get和set函数很麻烦,
毕竟java没有友元类这个玩意
/**************************************************************************************** *题目:树的子结构 * 输入两颗二叉树A和B,判断B是不是A的子结构。二叉树节点的定义如下。 *时间:2015年8月31日09:02:36 *文件:MergeLink.java *作者:cutter_point ****************************************************************************************/ package bishi.Offer50.y2015.m08.d31; import org.junit.Test; //引入我们的树的结构 import bishi.Offer50.y2015.m08.d26.*; public class HasSubTree { /** * 用来比较两个树是否相同 * @param pRoot1 * @param pRoot2 * @return */ private boolean compare(BinaryTreeNode pRoot1, BinaryTreeNode pRoot2) { if(pRoot2 == null) return true; if(pRoot1 == null && pRoot2 != null) return false; //如果值不同,直接false if(pRoot1.m_nValue != pRoot2.m_nValue) return false; //开始比较剩下的节点 return compare(pRoot1.m_pLeft, pRoot2.m_pLeft) && compare(pRoot1.m_pRight, pRoot2.m_pRight); } /** * 比较两个树,看看pRoot1中是否含有pRoot2的子结构 * @param pRoot1 * @param pRoot2 * @return */ public boolean hasSubTree(BinaryTreeNode pRoot1, BinaryTreeNode pRoot2) { if(pRoot1 == null) return false; else if(pRoot1 != null && pRoot2 == null) return true; boolean result = false; if(pRoot1.m_nValue == pRoot2.m_nValue) { //如果根相同,那么我们进行这颗树的比较 result = compare(pRoot1, pRoot2); }//if if(result == false) { //比较失败的话,我们就比较左边的子树 result = hasSubTree(pRoot1.m_pLeft, pRoot2); }//if if(result == false) { //左边比较失败,我们比较右边的 result = hasSubTree(pRoot1.m_pRight, pRoot2); }//if return result; } @Test public void test() { //注意,这里我们根据前序和中序的方式创建树的话,是有问题的,因为我们的树不是排序二叉树 //也就是我们的树中有重复元素,我们构建这个树的时候并没有考虑到这点,光从序列上来说实现的难度略大 //以后有机会,我们再从新改过,2015年8月31日09:56:13 int preorder[] = {7,8,9,2,4,3,6}; //前序 int inorder[] = {9,8,4,2,3,7,6}; //中序 int preorder2[] = {8,9,2}; //前序 int inorder2[] = {9,8,2}; //中序 BinaryTree bt = new BinaryTree(); bt.construct(preorder, inorder); BinaryTree bt2 = new BinaryTree(); bt.construct(preorder2, inorder2); HasSubTree hst = new HasSubTree(); boolean hastree = false; hastree = hst.hasSubTree(bt.root, bt2.root); System.out.println(hastree); } }
相关文章推荐
- Kali安装搜狗输入法
- Java版本的在指定目录及子目录下创建指定的文件
- Android不透明度16进制值
- 天声人語
- 干货分享!不得不看的【7年竞价实战经验总结】
- SpringMVC框架介绍
- 【java】getAbsolutePath()方法详解
- Vim命令合集(貌似有的有错误,Mark在这里,用到的时候来找)
- Objective-C 【在手动内存管理中如何写set方法】
- SylixOS入门指南--架设开发环境
- [interview] Aug. 2015
- Objective-C 【在手动内存管理中如何写set方法】
- hihoCoder 1225 向日葵
- 【java】File类的详解使用方法
- 数据源的配置
- 干货分享!不得不看的【7年竞价实战经验总结】
- 一个查看源代码的问题
- sublime text插件
- svn: E000113: Unable to connect to a repository at URL 'svn://IP/repos'无法连接主机“IP”: 由于连接方在一段时间后没有正确答复
- Python-切片