首页 > 代码库 > 28、输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
28、输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路:
1、当Tree1和Tree2都不为零的时候,才进行比较。否则直接返回false
2、
2.1
如果找到了对应Tree2的根节点的点,
以这个根节点为为起点判断是否包含Tree2
2.2
如果找不到,那么就再去root的左孩子当作起点,去判断时候包含Tree2
2.3
如果还找不到,那么就再去root的右孩子当作起点,去判断时候包含Tree2
1 public class Solution { 2 public static boolean HasSubtree(TreeNode root1, TreeNode root2) { 3 boolean result = false; 4 //当Tree1和Tree2都不为零的时候,才进行比较。否则直接返回false 5 if (root2 != null && root1 != null) { 6 //如果找到了对应Tree2的根节点的点 7 if(root1.val == root2.val){ 8 //以这个根节点为为起点判断是否包含Tree2 9 result = doesTree1HaveTree2(root1,root2); 10 } 11 //如果找不到,那么就再去root的左孩子当作起点,去判断时候包含Tree2 12 if (!result) { 13 result = HasSubtree(root1.left,root2); 14 } 15 16 //如果还找不到,那么就再去root的右孩子当作起点,去判断时候包含Tree2 17 if (!result) { 18 result = HasSubtree(root1.right,root2); 19 } 20 } 21 //返回结果 22 return result; 23 } 24 25 public static boolean doesTree1HaveTree2(TreeNode node1, TreeNode node2) { 26 //如果Tree2已经遍历完了都能对应的上,返回true 27 if (node2 == null) { 28 return true; 29 } 30 //如果Tree2还没有遍历完,Tree1却遍历完了。返回false 31 if (node1 == null) { 32 return false; 33 } 34 //如果其中有一个点没有对应上,返回false 35 if (node1.val != node2.val) { 36 return false; 37 } 38 39 //如果根节点对应的上,那么就分别去子节点里面匹配 40 return doesTree1HaveTree2(node1.left,node2.left) && doesTree1HaveTree2(node1.right,node2.right); 41 } 42 }
28、输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。