题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
解题思路
- 需要两个函数的递归,第一个是Root1与Root2节点相等,然后递归两个节点下面的左右节点,即DoesTree1HasTree2函数完成的。
- 如果不相等,就要递归Root1的左右子树再与Root2进行比较
- 代码参考书籍
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
bool result = false;
if(pRoot1 != NULL && pRoot2 != NULL){
if(pRoot1 -> val == pRoot2 -> val){
result = DoesTree1HasTree2(pRoot1, pRoot2);
}
if(!result){
result = HasSubtree(pRoot1 -> left, pRoot2);
}
if(!result){
result = HasSubtree(pRoot1 -> right, pRoot2);
}
}
return result;
}
bool DoesTree1HasTree2(TreeNode* pRoot1, TreeNode* pRoot2){
if(pRoot2 == NULL){
return true;
}
if(pRoot1 == NULL){
return false;
}
if(pRoot1 -> val != pRoot2 -> val){
return false;
}
return DoesTree1HasTree2(pRoot1 -> left, pRoot2 -> left) &&
DoesTree1HasTree2(pRoot1 -> right, pRoot2 -> right);
}
};