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

Posted 救赎之道就在其中

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断一颗二叉树是不是另外一颗的子结构相关的知识,希望对你有一定的参考价值。

这是一道比较经典的题目。我先是在百度的在线笔试中遇到,然后发现剑指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 }

 

以上是关于判断一颗二叉树是不是另外一颗的子结构的主要内容,如果未能解决你的问题,请参考以下文章

判断一颗二叉树是否为二叉平衡树 python 代码

101 Symmetric Tree 判断一颗二叉树是否是镜像二叉树

判断二叉树是否对称的代码

(树)判断一颗二叉树是否为镜像对称

剑指offer

剑指offer