用c语言编写程序以二叉链表作为二叉树的存储结构,编写算法实现如下功能: (1)创建二棵二叉树T和S的算法 (2)分别统计二叉树T和S的叶结点个数。 (3)判别两棵树T和S是否相等。 (4)交换二叉树T每个结点的左孩子和右孩子。
时间: 2024-12-13 15:18:12 浏览: 88
在C语言中,我们可以使用结构体来表示二叉树的节点,并通过指针连接形成二叉链表。这里是一个简单的示例,展示了如何实现上述功能:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val; // 节点值
struct TreeNode* left; // 左子节点指针
struct TreeNode* right; // 右子节点指针
} TreeNode;
// 创建新节点
TreeNode* newNode(int val) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = val;
node->left = NULL;
node->right = NULL;
return node;
}
// 创建二叉树函数
TreeNode* createTree(char** input, int start, int end) {
if (start > end)
return NULL;
TreeNode* root = newNode(input[start]);
int mid = (start + end) / 2;
root->left = createTree(input, start, mid - 1);
root->right = createTree(input, mid, end);
return root;
}
// 统计叶子节点数量
int countLeaves(TreeNode* root) {
if (root == NULL)
return 0;
if (root->left == NULL && root->right == NULL)
return 1;
return countLeaves(root->left) + countLeaves(root->right);
}
// 判断两棵树是否相等
int areTreesEqual(TreeNode* t, TreeNode* s) {
if (t == NULL && s == NULL)
return 1;
else if (t == NULL || s == NULL)
return 0;
return t->val == s->val && areTreesEqual(t->left, s->left) && areTreesEqual(t->right, s->right);
}
// 交换左右孩子
void swapChildren(TreeNode* root) {
if (root != NULL) {
TreeNode* temp = root->left;
root->left = root->right;
root->right = temp;
if (root->left != NULL)
swapChildren(root->left);
if (root->right != NULL)
swapChildren(root->right);
}
}
int main() {
char input1[] = "1,2,3,4,5,6,7";
char input2[] = "4,2,6,1,3,5,7";
TreeNode* tree1 = createTree(input1, 0, strlen(input1) - 1);
TreeNode* tree2 = createTree(input2, 0, strlen(input2) - 1);
printf("Tree 1 leaf nodes: %d\n", countLeaves(tree1));
printf("Tree 2 leaf nodes: %d\n", countLeaves(tree2));
if (areTreesEqual(tree1, tree2))
printf("Trees are equal.\n");
else
printf("Trees are not equal.\n");
swapChildren(tree1);
printf("After swapping children in Tree 1:\n");
// 打印树的结构...
return 0;
}
```
在这个代码中,我们首先定义了二叉树节点的结构以及相关的操作,如创建树、计算叶节点、判断树是否相等和交换孩子的函数。`main()`函数里展示了如何创建两个二叉树并进行相应的操作。
阅读全文