用c语言编写:实验内容:采用二叉链表存储二叉树,并对二叉树进行如下操作:建立一棵二叉树;三种方式遍历二叉树;求二叉树的深度;输出二叉树所有结点的个数; 输出二叉树所有叶子结点的个数。要求写出各个算法相应的实现程序。
时间: 2024-11-28 10:19:03 浏览: 11
erchashubianli.rar_用二叉链表 进行 二叉树 遍历
在C语言中,我们可以使用链表结构来实现二叉树,这里将提供一些基本操作的实现:
首先,我们定义一个二叉链表节点的结构:
```c
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
```
接下来,创建二叉树、遍历和计算深度等操作的实现:
1. **建立二叉树**(插入一个新节点)
```c
Node* insert(Node* root, int value) {
if (root == NULL) {
root = (Node*)malloc(sizeof(Node));
root->data = value;
root->left = root->right = NULL;
} else if (value < root->data)
root->left = insert(root->left, value);
else
root->right = insert(root->right, value);
return root;
}
```
2. **前序遍历**(根-左-右)
```c
void preorderTraversal(Node* node) {
if (node != NULL) {
printf("%d ", node->data);
preorderTraversal(node->left);
preorderTraversal(node->right);
}
}
```
3. **中序遍历**(左-根-右)
```c
void inorderTraversal(Node* node) {
if (node != NULL) {
inorderTraversal(node->left);
printf("%d ", node->data);
inorderTraversal(node->right);
}
}
```
4. **后序遍历**(左-右-根)
```c
void postorderTraversal(Node* node) {
if (node != NULL) {
postorderTraversal(node->left);
postorderTraversal(node->right);
printf("%d ", node->data);
}
}
```
5. **计算深度**
```c
int treeDepth(Node* node) {
if (node == NULL) return 0;
int left_depth = treeDepth(node->left);
int right_depth = treeDepth(node->right);
return (left_depth > right_depth ? left_depth : right_depth) + 1;
}
```
6. **计算叶子结点数量**
```c
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);
}
```
现在你可以把这些部分组合在一起,分别调用它们来完成实验。
阅读全文