17 树的子结构

题目描述

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
 
要查找树A 是否存再和树B一样的子树,我们可以分为2步:
1 遍历树A 找到与B根节点相同的节点R
2 判断以R为根节点 构成的树 与树B是否相同,递归的去做,先判断根节点是否相同,再判断左右节点是否相同,终止条件是,R或B遍历到叶子节点。
 
 1 public class Solution {
 2     public boolean HasSubtree(TreeNode root1,TreeNode root2) {
 3         boolean res =false;
 4         if(root1!=null && root2!=null){//边界条件
 5         if(root1.val==root2.val)
 6             //判断子树是否相同
 7             res = Tree1HaveTree2(root1,root2);
 8         if(!res)
 9             res = HasSubtree(root1.left, root2);
10         if(!res)
11             res = HasSubtree(root1.right, root2);
12         }
13         return res;
14     
15     }
16     private boolean Tree1HaveTree2(TreeNode root1,TreeNode root2){、
17         //边界条件
18         if(root2==null) return true;//树B已经遍历完,说明B是A的子树
19         if(root1==null) return false;//如果A遍历完了,B没遍历完,肯定不是子树
20 
21         if(root1.val!= root2.val) return false;//根节点不同 更不是了
22         return Tree1HaveTree2(root1.left,root2.left) &&Tree1HaveTree2(root1.right,root2.right);
23     }
24 }

 

posted @ 2017-12-12 21:41  乐乐章  阅读(165)  评论(0编辑  收藏  举报