题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路:
先判断A和B的根节点是否相同,不相同则递归找A的左右子树是否和B的根节点相同,一直不相同则返回false
若找到相同根节点,判断该根节点的左右子树是否也对应和B的左右子树相等
若B为空,则B已遍历完,返回true
若A为空,B还未遍历完A已经为空,返回false
C++
/*
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)
{
if(pRoot1 == nullptr || pRoot2 == nullptr)
return false;
return CompareRoot1AndRoot2(pRoot1, pRoot2) || HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2);
}
bool CompareRoot1AndRoot2(TreeNode* pRoot1, TreeNode* pRoot2){
if(pRoot2 == nullptr)
return true;
if(pRoot1 == nullptr )
return false;
return pRoot1->val == pRoot2->val && CompareRoot1AndRoot2(pRoot1->left, pRoot2->left) && CompareRoot1AndRoot2(pRoot1->right, pRoot2->right);
}
};