用c语言实现二叉树并加上注释
时间: 2023-05-30 09:02:02 浏览: 95
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int data; // 数据域
struct TreeNode *left; // 左子树指针
struct TreeNode *right; // 右子树指针
} TreeNode, *Tree;
// 创建二叉树
Tree createTree() {
Tree root = NULL; // 根节点指针初始化为NULL
int data;
scanf("%d", &data); // 读入节点数据
if (data != -1) { // 如果节点数据不为-1,说明该节点存在
root = (Tree)malloc(sizeof(TreeNode)); // 为根节点分配内存空间
root->data = data; // 将读入的节点数据存储到根节点中
root->left = createTree(); // 递归创建左子树
root->right = createTree(); // 递归创建右子树
}
return root; // 返回根节点指针
}
// 先序遍历
void preOrder(Tree root) {
if (root != NULL) {
printf("%d ", root->data); // 输出节点数据
preOrder(root->left); // 递归遍历左子树
preOrder(root->right); // 递归遍历右子树
}
}
// 中序遍历
void inOrder(Tree root) {
if (root != NULL) {
inOrder(root->left); // 递归遍历左子树
printf("%d ", root->data); // 输出节点数据
inOrder(root->right); // 递归遍历右子树
}
}
// 后序遍历
void postOrder(Tree root) {
if (root != NULL) {
postOrder(root->left); // 递归遍历左子树
postOrder(root->right); // 递归遍历右子树
printf("%d ", root->data); // 输出节点数据
}
}
int main() {
printf("请输入二叉树的节点数据,-1表示该节点不存在:\n");
Tree root = createTree(); // 创建二叉树
printf("先序遍历结果为:");
preOrder(root); // 先序遍历
printf("\n中序遍历结果为:");
inOrder(root); // 中序遍历
printf("\n后序遍历结果为:");
postOrder(root); // 后序遍历
printf("\n");
return 0;
}
阅读全文