用C语言完成设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,按此方法创建两棵二叉树,然后编写递归算法判断这两棵树是否相等。
时间: 2025-01-01 10:39:24 浏览: 82
在C语言中,我们可以使用结构体定义二叉树节点,并用链表连接节点来构建先序遍历的结果。首先,我们需要定义一个`Node`结构体,包含一个字符元素`data`和两个指向左右子节点的指针`left`和`right`。
```c
typedef struct Node {
char data;
struct Node* left;
struct Node* right;
} TreeNode;
```
接下来,我们可以实现先序遍历构造链表的函数:
```c
TreeNode* createPreorderList(TreeNode* root) {
if (root == NULL) return NULL;
// 先访问当前节点
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = root->data;
// 然后左子树
node->left = createPreorderList(root->left);
// 最后右子树
node->right = createPreorderList(root->right);
return node;
}
```
为了判断两棵树是否相等,我们可以通过递归来比较它们的根节点,以及它们的左右子树是否也相等:
```c
int isSameTree(TreeNode* p, TreeNode* q) {
if (p == NULL && q == NULL)
return 1; // 如果都是空树,则认为它们相等
if (p != NULL && q != NULL) {
// 比较根节点的数据和子树是否相等
if (p->data == q->data &&
isSameTree(p->left, q->left) &&
isSameTree(p->right, q->right))
return 1;
else
return 0;
} else {
return 0; // 一棵非空,另一棵为空,不相等
}
}
```
现在你可以创建两棵不同的或相同的二叉树,然后通过`isSameTree`函数判断它们是否相等。例如:
```c
// 创建第一棵树并遍历为链表
TreeNode* tree1Root = ...; // 根据需要构建
TreeNode* tree1List = createPreorderList(tree1Root);
// 创建第二棵树并遍历为链表
TreeNode* tree2Root = ...; // 根据需要构建
TreeNode* tree2List = createPreorderList(tree2Root);
// 判断两棵树是否相等
if (isSameTree(tree1List, tree2List)) {
printf("两棵树相等。\n");
} else {
printf("两棵树不相等。\n");
}
```
阅读全文
相关推荐













