使用C++程序实现判断二叉树b1中是否有与b2相同的子树
时间: 2024-05-28 21:09:57 浏览: 84
c++写的二叉树的判定程序
好的,我可以帮您回答这个问题。判断二叉树b1中是否有与b2相同的子树,可以使用递归的方法来实现。具体的实现步骤如下:
1. 判断当前节点是否为NULL,如果是,则返回false
2. 判断当前节点是否与b2的根节点相同,如果相同,则判断b1的左子树和b2的左子树是否相同,以及b1的右子树和b2的右子树是否相同,如果都相同,则返回true
3. 如果当前节点与b2的根节点不相同,则分别判断b1的左子树和b1的右子树是否存在与b2相同的子树
4. 如果b1的左子树或右子树存在与b2相同的子树,则返回true,否则返回false
下面是该问题的C语言实现代码:
struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
};
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
if (p == NULL && q == NULL) {
return true;
}
if (p == NULL || q == NULL) {
return false;
}
if (p->val != q->val) {
return false;
}
return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}
bool hasSubtree(struct TreeNode* b1, struct TreeNode* b2) {
if (b2 == NULL) {
return true;
}
if (b1 == NULL) {
return false;
}
if (isSameTree(b1, b2)) {
return true;
}
return hasSubtree(b1->left, b2) || hasSubtree(b1->right, b2);
}
阅读全文