【剑指offer】22.树的子结构
总目录:
1.问题描述
输入两棵二叉树A,B,判断B是不是A的子结构。(我们约定空树不是任意一个树的子结构)
假如给定A为{8,8,7,9,2,#,#,#,#,4,7},B为{8,9,2},2个树的结构如下,可以看出B是A的子结构

2.问题分析
1递归
注意以下条件:
(1)空树不是任意一个树的子结构;
(2)B树根节点下面的子树如果为空则判定为true,即不必追求B树跟A中找到的“根节点”以下部分完全一致,B是A的子集即可;
3.代码实例
 
1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9 };*/ 10 class Solution { 11 public: 12 bool IsEqualTree(TreeNode* root1, TreeNode* root2) { 13 //中止条件 14 if (root2 == NULL) { 15 return true; 16 } 17 if (root1 == NULL) { 18 return false; 19 } 20 if (root1->val != root2->val) { 21 return false; 22 } 23 24 //本层业务 25 26 //递归调用 27 return IsEqualTree(root1->left, root2->left) && 28 IsEqualTree(root1->right, root2->right); 29 } 30 31 bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { 32 //中止条件 33 if (pRoot1 == NULL || pRoot2 == NULL) { 34 return false; 35 } 36 37 //本层逻辑 38 //调用递归,查找子树上是否有该树 39 return IsEqualTree(pRoot1, pRoot2) 40 || HasSubtree(pRoot1->left, pRoot2) 41 || HasSubtree(pRoot1->right, pRoot2); 42 } 43 };
 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号