用C语言在一个程序里面用递归创建两个二叉树,并且利用遍历来比较这两个二叉树是否相等
时间: 2024-02-26 09:59:26 浏览: 73
好的,我可以帮你解决这个问题。以下是实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结构体
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
// 创建二叉树的递归函数
struct TreeNode* createTree()
{
int val;
scanf("%d", &val);
if (val == -1) {
return NULL;
}
struct TreeNode* node = (struct TreeNode*)malloc(sizeof(struct TreeNode));
node->val = val;
node->left = createTree();
node->right = createTree();
return node;
}
// 比较两棵二叉树是否相等的递归函数
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);
}
int main()
{
printf("请输入第一棵二叉树的节点值,-1表示空节点:\n");
struct TreeNode* tree1 = createTree();
printf("请输入第二棵二叉树的节点值,-1表示空节点:\n");
struct TreeNode* tree2 = createTree();
if (isSameTree(tree1, tree2)) {
printf("两棵二叉树相等\n");
} else {
printf("两棵二叉树不相等\n");
}
return 0;
}
```
通过调用 `createTree()`函数,可以递归创建二叉树。遇到值为 `-1` 的节点,表示该节点为NULL。然后,通过调用 `isSameTree()`函数,比较两棵二叉树是否相等。如果两棵二叉树相等,则返回 `true`,否则返回 `false`。
希望这可以帮到你!
阅读全文