目录:
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
bool IsSubTree(TreeNode* pRoot1, TreeNode* pRoot2) {
if(pRoot2 == NULL)
return true;
if(pRoot1 == NULL)
return false;
if(pRoot1->val != pRoot2->val)
return false;
return IsSubTree(pRoot1->left, pRoot2->left) && IsSubTree(pRoot1->right, pRoot2->right);
}
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2){
if(pRoot1 == NULL || pRoot2 == NULL)
return false;
if(pRoot1->val == pRoot2->val && IsSubTree(pRoot1, pRoot2))
return true;
else
return HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2);
}
判断两个数是否完全相同。
代码:(跟上方代码的第一个函数段 是不同的!!)
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
if(p == NULL && q == NULL)
return true;
if (p == NULL || q == NULL)
return false;
bool ans = (p->val == q->val) && isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
return ans;
}