【面试题18】树的子结构

【题目描述】

输入两棵二叉树A和B,判断B是不是A的子结构。

【解决方案】

根据图示,用递归解决。

注意代码的鲁棒性,树的操作很可能会访问不存在的内存,必须做好对null的处理!

我的代码示例,仅供参考:

 1         public static bool HasSubTree(BinaryTreeNode treeA, BinaryTreeNode treeB)
 2         {
 3             bool result = false;
 4 
 5             if (treeA != null && treeB != null)
 6             {
 7                 if (treeA.Value == treeB.Value)
 8                 {
 9                     result = DoseTreeAHasTreeB(treeA, treeB);
10                 }
11 
12                 if (!result)
13                 {
14                     result = HasSubTree(treeA.Left, treeB);
15                 }
16 
17                 if (!result)
18                 {
19                     result = HasSubTree(treeA.Right, treeB);
20                 }
21             }
22 
23             return result;
24         }
25 
26         public static bool DoseTreeAHasTreeB(BinaryTreeNode treeA, BinaryTreeNode treeB)
27         {
28             if (treeB == null)
29             {
30                 return true;
31             }
32 
33             if (treeA == null)
34             {
35                 return false;
36             }
37 
38             if (treeA.Value != treeB.Value)
39             {
40                 return false;
41             }
42 
43             return DoseTreeAHasTreeB(treeA.Left, treeB.Left)
44                 && DoseTreeAHasTreeB(treeA.Right, treeB.Right);
45         }

 

posted @ 2015-09-12 23:52  叫我霍啊啊啊  阅读(172)  评论(0编辑  收藏  举报