输入两棵二叉树 $A,B$,判断 $ B $ 是不是$ A $ 的子结构。
我们规定空树不是任何树的子结构。
样例
树 AA:
1
2
3
4
5
6
7
|
8
/ \
8 7
/ \
9 2
/ \
4 7
|
树 BB:
返回 true,因为 B 是 A 的子结构。
解题代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool hasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
if(pRoot1==NULL || pRoot2==NULL) return false;
return cmp(pRoot1,pRoot2);
}
#define Node TreeNode
bool cmp(Node *p,Node *q) {
if(q==NULL) return true;
if(p&&q) {
bool res = false;
if(p->val == q->val) {
res |= (cmp(p->left,q->left) && cmp(p->right,q->right));
}
res |= cmp(p->left,q);
res |= cmp(p->right,q);
return res;
}
//if(p||q) return false;
return false;
}
};
|