剑指Offer——树的子结构
来源:互联网 发布:手机在线网页源码 编辑:程序博客网 时间:2024/06/14 15:05
题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
树节点定义如下:
public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}
解题思路
- 先序遍历树A,如果某个节点与树B的根节点值相同,则对该子树进行子结构判断
import java.util.Stack;public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { if(root1==null || root2==null)return false; Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode cur = root1; while(cur!=null || !stack.isEmpty()){ while(cur != null){ if(root2.val == cur.val){ if(isSubTree(cur, root2))return true; } stack.push(cur); cur = cur.left; } cur = stack.pop(); cur = cur.right; } return false; } private boolean isSubTree(TreeNode root1, TreeNode root2){ if(root2 == null)return true; else if(root1 == null)return false; if(root1.val != root2.val)return true; return isSubTree(root1.left, root2.left) && isSubTree(root1.right, root2.right); }}
- 递归的方式,更加简洁。
public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { if(root1==null || root2==null)return false; boolean flag = false; if(root1.val == root2.val){ flag = isSubTree(root1, root2); } //左子树中寻找 if(!flag)flag = HasSubtree(root1.left, root2); //右子树中寻找 if(!flag)flag = HasSubtree(root1.right, root2); return flag; } private boolean isSubTree(TreeNode root1, TreeNode root2){ if(root2 == null)return true; else if(root1 == null)return false; if(root1.val != root2.val)return false; return isSubTree(root1.left, root2.left) && isSubTree(root1.right, root2.right); }}
阅读全文
0 0
- 剑指offer—树的子结构
- 剑指offer—树的子结构
- 《剑指offer》——树的子结构
- 【剑指 offer】(十八)—— 树的子结构
- 剑指offer——树的子结构
- 剑指offer——树的子结构
- 剑指Offer——(17)树的子结构
- 剑指offer——树的子结构
- 剑指offer——树的子结构_
- 剑指Offer——树的子结构
- 剑指offer——普通二叉树的子结构
- 剑指offer——17.树的子结构
- 剑指Offer—17—树的子结构
- 剑指offer 面试题18—树的子结构
- 剑指offer系列—T18树的子结构
- 剑指offer(17)—树的子结构
- 剑指offer:判断树的子结构
- 【剑指offer】树的子结构
- AngularJS 指令对象的Scope属性
- 刷题——分糖果
- 欢迎使用CSDN-markdown编辑器
- 深搜的剪枝
- 堆和栈的区别(转过无数次的文章)
- 剑指Offer——树的子结构
- 电商项目实战——第一天(环境部署)2
- 截获所有以太网帧数据并进行具体分析
- 【github notepad】QT 标签的快速切换、文本特殊格式清除
- Unity 摄像机简介
- 朴素贝叶斯分类器【java实现 + 从mysql数据库读数据】
- CSS3中的变形功能-transform功能
- Linux/Android系统知识之Linux入门篇--编写Linux驱动
- AVLTree