码迷,mamicode.com
首页 > 其他好文 > 详细

判断一颗二叉树是不是另外一颗的子结构

时间:2016-05-24 09:17:57      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

这是一道比较经典的题目。我先是在百度的在线笔试中遇到,然后发现剑指Offer上有原题。当然题目并不完全一样不过大致相同。

百度笔试是给你两个根节点判断第棵树是不是第一棵树的子树。剑指Offer是问你第二颗数是不是第一棵树的子结构(也就是说可是是第一棵二叉树的中间阶段)。

 

笔试的时候恁是没完全通过测试案例,就差几个,实在也是不知道是什么问题。这次剑指Offer的在线测试中,发现他的描述不是很准确。我一开始以为空树是任何树的子结构,结果空树不是任何数的子结构。

第一版代码:算法复杂度是O(M * N) ;M是第一棵树的元素个数,N是第二颗树的元素个数。

 1 /**
 2 public class TreeNode {
 3     int val = 0;
 4     TreeNode left = null;
 5     TreeNode right = null;
 6 
 7     public TreeNode(int val) {
 8         this.val = val;
 9 
10     }
11 
12 }
13 */
14 public class Solution {
15     public boolean HasSubtree(TreeNode root1,TreeNode root2) {
16         
17         if(root2 == null)
18             return false;
19         
20         return DFS(root1, root2);
21     }
22     
23     private boolean DFS(TreeNode root1, TreeNode root2) {
24         
25           if(root1 == null)
26             return false;
27         
28         if(IsSubTree(root1, root2))
29             return true;
30         
31         return HasSubtree(root1.left, root2) | HasSubtree(root1.right, root2);  
32     }
33     
34     private boolean IsSubTree(TreeNode root1, TreeNode root2) {
35         
36         if(root2 == null)
37             return true;
38         else {
39             if(root1 == null || root1.val != root2.val)
40                 return false;
41             return IsSubTree(root1.left, root2.left) & IsSubTree(root1.right, root2.right);
42         }
43         
44     }
45 }

 

判断一颗二叉树是不是另外一颗的子结构

标签:

原文地址:http://www.cnblogs.com/dsj2016/p/5522210.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!