剑指offer-面试题18:树的子结构
2016-06-16 11:56
323 查看
题目
输入两棵二叉树A和B,判断B是不是A的子结构。二叉树结点的定义如下:public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } public TreeNode() { // TODO Auto-generated constructor stub } }
解
//在树A中查找与树B根节点的值一样的结点,先根遍历 boolean HasSubTree(TreeNode pRoot1,TreeNode pRoot2){ boolean result=false; if(pRoot1!=null && pRoot2!=null){ if(pRoot1.val==pRoot2.val)//找到树A中查找的根节点的值一样的结点 result=DoesTree1HaveTree2(pRoot1,pRoot2); if(!result) result=HasSubTree(pRoot1.left,pRoot2);//没找到或者 if(!result) result=HasSubTree(pRoot1.right,pRoot2); } return result; } //判断树A中以R为根节点的子树是不是和树B具有相同的结构 boolean DoesTree1HaveTree2(TreeNode pRoot1, TreeNode pRoot2){ if(pRoot2==null)//树B的结点为空,循环终止 return true; if(pRoot1==null)//树B的结点不为空,而树A对应的结点为空,循环终止 return false; if(pRoot1.val!=pRoot2.val)//树A和树B对应结点值不同,循环终止 return false; return DoesTree1HaveTree2(pRoot1.left,pRoot2.left) && DoesTree1HaveTree2(pRoot1.right,pRoot2.right); }
相关文章推荐
- 一个关于if else容易迷惑的问题
- AVL树-自平衡二叉查找树(Java实现)
- 一道sql面试题附答案
- C# 超高面试题收集整理
- C语言二叉树的非递归遍历实例分析
- 使用C语言构建基本的二叉树数据结构
- 一波二叉树遍历问题的C++解答实例分享
- 举例讲解C语言程序中对二叉树数据结构的各种遍历方式
- C++非递归队列实现二叉树的广度优先遍历
- PHP实现的线索二叉树及二叉树遍历方法详解
- C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法
- 人人网javascript面试题 可以提前实现下
- PHP中设置一个严格30分钟过期Session面试题的4种答案
- 据说是雅虎的一份PHP面试题附答案
- php牛逼的面试题分享
- 一套比较完整的javascript面试题(部分答案)
- 10个经典的Java main方法面试题
- C#非递归先序遍历二叉树实例
- 小米公司JavaScript面试题
- C++将二叉树转为双向链表及判断两个链表是否相交