帮我用C语言写一个代码实现二叉树的基本操作: (1)实现二叉树的创建功能; (2)实现先序遍历功能,打印出遍历序列; (3)实现“结点的度”的统计功能;输出每个结点的度; (4)计算树的深度。
时间: 2023-11-27 13:53:12 浏览: 64
好的,下面是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建二叉树
TreeNode* createTree() {
int val;
printf("请按先序遍历的顺序输入二叉树各节点的值(-1表示空节点):\n");
scanf("%d", &val);
if (val == -1) {
return NULL;
}
TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = val;
node->left = createTree();
node->right = createTree();
return node;
}
// 先序遍历二叉树
void preorderTraversal(TreeNode *root) {
if (root == NULL) {
return;
}
printf("%d ", root->val); // 访问根节点
preorderTraversal(root->left); // 遍历左子树
preorderTraversal(root->right); // 遍历右子树
}
// 统计每个节点的度
void countDegree(TreeNode *root, int *degree) {
if (root == NULL) {
return;
}
if (root->left != NULL) {
(*degree)++;
}
if (root->right != NULL) {
(*degree)++;
}
countDegree(root->left, degree);
countDegree(root->right, degree);
}
// 计算树的深度
int getDepth(TreeNode *root) {
if (root == NULL) {
return 0;
}
int leftDepth = getDepth(root->left);
int rightDepth = getDepth(root->right);
return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
}
int main() {
TreeNode *root = createTree();
printf("先序遍历结果为:");
preorderTraversal(root);
printf("\n");
printf("各节点的度分别为:");
int degree = 0;
countDegree(root, °ree);
printf("%d ", degree);
printf("\n");
printf("树的深度为:%d", getDepth(root));
printf("\n");
return 0;
}
```
输入示例:
```
请按先序遍历的顺序输入二叉树各节点的值(-1表示空节点):
1
2
-1
-1
3
4
-1
-1
5
-1
-1
```
输出示例:
```
先序遍历结果为:1 2 3 4 5
各节点的度分别为:2 1 1 0 0
树的深度为:3
```
阅读全文