- 输入两棵二叉树A,B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
算法思路:先确定两棵树比较的起始位置,若起始位置相等,再去比较左右子树是否相等(增加判断两个数是否相等的函数);若起始位置不相等,去左子树找子结构或者去右子树找子结构,最后返回查找的结果。
bool isSameTree(TreeNode* p, TreeNode* q){
if(q == nullptr)
return true;
if(p == nullptr)
return false;
if(p->val != q->val)
return false;
return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
if(pRoot1==nullptr || pRoot2==nullptr)
return false;
bool result = false;
if(pRoot1->val == pRoot2->val)
result = isSameTree(pRoot1, pRoot2);
if(result != true)
result = HasSubtree(pRoot1->left, pRoot2);
if(result != true)
result = HasSubtree(pRoot1->right, pRoot2);
return result;
}