c语言设二叉树中每个结点元素均为一个字符,按先序遍历的顺序建立二叉链表,创建两颗二叉树,用递归算法判断判断他们是否相等
时间: 2024-10-28 08:11:51 浏览: 66
在C语言中,如果要创建两颗二叉树并使用递归算法来判断它们是否相等,首先我们需要定义结构体表示二叉树节点,包含字符值和指向左右子节点的指针:
```c
typedef struct TreeNode {
char data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
```
接下来,我们定义两个函数分别用于构建二叉链表和比较两个二叉树是否相等:
1. **构造二叉链表的先序遍历函数** (PreorderTraversal):
- 对于根节点,打印其值;
- 递归地对左子树进行遍历;
- 递归地对右子树进行遍历。
```c
void preorderTraversal(TreeNode* root, TreeNode** result) {
if (!root) return;
*result = (*result ? *result : (TreeNode*)malloc(sizeof(TreeNode))) // 创建新节点或指向旧节点
(*result)->data = root->data;
preorderTraversal(root->left, &(*result)->left);
preorderTraversal(root->right, &(*result)->right);
}
```
2. **比较两棵二叉树是否相等的函数** (areTreesEqual):
- 如果两个节点都为空,则返回true;
- 如果两个节点数据不等,返回false;
- 否则,递归地比较他们的左右子树是否相等。
```c
int areTreesEqual(TreeNode* tree1, TreeNode* tree2) {
if (!tree1 && !tree2) return 1; // 都空,相等
if ((!tree1) || (!tree2)) return 0; // 一棵空,另一棵非空,不等
return tree1->data == tree2->data && areTreesEqual(tree1->left, tree2->left) && areTreesEqual(tree1->right, tree2->right);
}
```
现在你可以创建两颗二叉树,并通过`preorderTraversal`得到对应的先序遍历链表,然后使用`areTreesEqual`函数来判断它们是否相等。以下是完整的示例:
```c
// 创建二叉树的函数省略
TreeNode* list1Result = NULL;
preorderTraversal(tree1, &list1Result);
TreeNode* list2Result = NULL;
preorderTraversal(tree2, &list2Result);
if (areTreesEqual(list1Result, list2Result)) {
printf("两棵树相等\n");
} else {
printf("两棵树不相等\n");
}
```
阅读全文