用C语言写程序1.定义一个二叉树的二叉链表结构,以应用于下面整个算法中 2. 输入一组正整数(假设输入0结束)建立一棵二叉排序树 3. 交换所建立的二叉排序树的左右子树,中序遍历该二叉树,查看其结果 4.统计该二叉树的叶子节点个数 5.定义一个maia函数来调用它们,以检验其运行结果
时间: 2024-03-02 18:51:02 浏览: 59
关于一个数据结构的一个i算法的描述,是二叉树的遍历问题,只有源代码,但是是可以直接运行的,是用C写的二叉树遍历问题.zip
好的,我会根据您的要求进行回答。下面是对应的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结构体
typedef struct Node {
int data;
struct Node *left;
struct Node *right;
} Node;
// 创建新节点
Node* createNode(int data) {
Node *newNode = (Node*) malloc(sizeof(Node));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 插入节点到二叉排序树中
Node* insertNode(Node *node, int data) {
if (node == NULL) {
return createNode(data);
} else if (data < node->data) {
node->left = insertNode(node->left, data);
} else if (data > node->data) {
node->right = insertNode(node->right, data);
}
return node;
}
// 交换二叉树的左右子树
void swapTree(Node *node) {
if (node == NULL) {
return;
}
Node *temp = node->left;
node->left = node->right;
node->right = temp;
swapTree(node->left);
swapTree(node->right);
}
// 统计叶子节点个数
int countLeaves(Node *node) {
if (node == NULL) {
return 0;
} else if (node->left == NULL && node->right == NULL) {
return 1;
} else {
return countLeaves(node->left) + countLeaves(node->right);
}
}
// 中序遍历二叉树
void inOrderTraversal(Node *node) {
if (node == NULL) {
return;
}
inOrderTraversal(node->left);
printf("%d ", node->data);
inOrderTraversal(node->right);
}
// 主函数
int main() {
Node *root = NULL;
int data;
printf("请输入一组正整数,以0结束:\n");
scanf("%d", &data);
while (data != 0) {
root = insertNode(root, data);
scanf("%d", &data);
}
printf("建立的二叉排序树中序遍历结果为:");
inOrderTraversal(root);
printf("\n");
swapTree(root);
printf("交换左右子树后的二叉树中序遍历结果为:");
inOrderTraversal(root);
printf("\n");
printf("该二叉树的叶子节点个数为:%d\n", countLeaves(root));
return 0;
}
```
然后,在主函数里调用这些函数即可完成对应的功能:
```c
int main() {
Node *root = NULL;
int data;
printf("请输入一组正整数,以0结束:\n");
scanf("%d", &data);
while (data != 0) {
root = insertNode(root, data);
scanf("%d", &data);
}
printf("建立的二叉排序树中序遍历结果为:");
inOrderTraversal(root);
printf("\n");
swapTree(root);
printf("交换左右子树后的二叉树中序遍历结果为:");
inOrderTraversal(root);
printf("\n");
printf("该二叉树的叶子节点个数为:%d\n", countLeaves(root));
return 0;
}
```
希望这个代码能够满足您的要求。
阅读全文