树的子结构

题目描述

  输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
  思路:两个递归函数,一个负责遍历树A;另一个负责判断由树A中某一个节点作为根节点的子树是否和树B结构一样
 1 bool isSubTree(TreeNode *pRoot1, TreeNode *pRoot2)
 2 {
 3     if(pRoot2==NULL)return true;
 4     if(pRoot1==NULL)return false;
 5     if(pRoot1->val != pRoot2->val)return false;
 6     return isSubTree(pRoot1->left, pRoot2->left) && isSubTree(pRoot1->right, pRoot2->right);
 7 }
 8 void DFS(TreeNode *pRoot1, TreeNode *pRoot2, bool &result)
 9 {
10     if(pRoot1->val == pRoot2->val)
11     {
12         bool flag=isSubTree(pRoot1, pRoot2);
13         if(flag)
14         {
15             result=true;
16             return;
17         }
18     }
19     if(pRoot1->left)DFS(pRoot1->left, pRoot2, result);
20     if(pRoot1->right)DFS(pRoot1->right, pRoot2, result);
21 }
22 bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
23 {
24     if(pRoot1==NULL || pRoot2==NULL)return false;
25     bool result=false;
26     DFS(pRoot1, pRoot2, result);
27     return result;
28 }

 

 

posted @ 2017-12-23 15:14  jeysin  阅读(140)  评论(0编辑  收藏  举报