剑指offer系列之16:树的子结构
2016-04-11 20:08
459 查看
题目描述:输入两棵二叉树A和B,判断B是不是A的子结构。
思路:要查找A中是不是含有和B一样的子树,可以分成两步,第一部在A中找到和B的根节点的值一样的节点R,第二步在判断以R为根节点的子树是不是包含和B一样的结构。第一部在二叉树中查找与根节点的值一样的节点,实际上就是树的遍历,可以用递归的方法来遍历,
递归调用HasSubtree函数,如果发现某一节点的值和树B的根节点的值相同,则调用DoesTree1HaveTree2函数做第二步判断。第二步判断也是使用递归,递归的终止条件是到达了树A或者树B的叶结点。
思路:要查找A中是不是含有和B一样的子树,可以分成两步,第一部在A中找到和B的根节点的值一样的节点R,第二步在判断以R为根节点的子树是不是包含和B一样的结构。第一部在二叉树中查找与根节点的值一样的节点,实际上就是树的遍历,可以用递归的方法来遍历,
public boolean HasSubtree(TreeNode root1,TreeNode root2) { boolean result = false; if(root1 != null && root2 != null){ if(root1.val == root2.val){ result = doesTree1HasTree2(root1,root2); } if(!result){ result = HasSubtree(root1.left,root2); } if(!result){ result = HasSubtree(root1.right,root2); } } return result; }
递归调用HasSubtree函数,如果发现某一节点的值和树B的根节点的值相同,则调用DoesTree1HaveTree2函数做第二步判断。第二步判断也是使用递归,递归的终止条件是到达了树A或者树B的叶结点。
private boolean doesTree1HasTree2(TreeNode root1,TreeNode root2){ if(root2 == null){ return true; } if(root1 == null){ return false; } if(root1.val != root2.val){ return false; } return doesTree1HasTree2(root1.left,root2.left) && doesTree1HasTree2(root1.right,root2.right); }
相关文章推荐
- qt+evaluatejavascript
- js和qt4 evaluteJavascript
- css div自适应高度height
- 【剑指offer系列】 圆圈中最后剩下的数字___45
- js练习题:网页换肤
- 剑指offer系列之15:合并两个有序的链表
- 基于Gulp + Browserify构建es6环境下的自动化前端项目
- css3 改变默认选中文本背景色和文本颜色
- 用CSS3变形创建半圆形导航
- 从零开始学习jQuery (五) 事件与事件对象
- css3 画半圆和1/4圆
- [前端]防止xss攻击的最简单方法
- 《转》HTML标签解释大全
- 获取前端post方式传过来的JSON格式的数据的代码
- 解剖css3的background-size属性
- jQuery-:contains("")查询包含值的用法实例
- 解决undefined reference to `__fdelt_chk@GLIBC_2.15'的问题
- AngularJS中的按需加载ocLazyLoad
- 11-04-16: Collective atomic scattering and motional effects in a dense coherent medium
- css3 画三角形