【剑指offer】树的子结构

题目链接:树的子结构

 

题意:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

 

题解:先在A中找到B的根结点,找的过程递归实现。再判断在A中以这个根结点为节点的子树是不是和B一样。

 

代码:

 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 isChild(TreeNode* p1,TreeNode* p2){
13         if(p2 == NULL )    return true;
14         if(p1 == NULL )    return false;
15         if(p1->val != p2->val )    return false;
16         return isChild(p1->left,p2->left)&&isChild(p1->right,p2->right);
17     }
18     bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2){
19         bool flag = false;
20         if(pRoot1 == NULL  || pRoot2 == NULL )    return false;
21         if(pRoot1->val == pRoot2->val){    //A中找到这个根节点,判断结构
22             flag = isChild(pRoot1,pRoot2);
23         }
24         if(!flag)    flag = HasSubtree(pRoot1->left,pRoot2);//继续左子树找
25         if(!flag)    flag = HasSubtree(pRoot1->right,pRoot2);//继续右子树找
26         return flag;
27     }
28 };
原文地址:https://www.cnblogs.com/Asumi/p/12403505.html