#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
// 构造树节点
typedef struct tree_node
{
datatype data;//根数据
struct tree_node* lchild;//左孩子
struct tree_node* rchild;//右孩子
}tree_node, *tree_ptr;
//创建二叉树,用递归函数
tree_ptr initTree(int size, int num)//树总节点数7,树的根节点序号1
{
// 开辟空间,创建树节点
tree_ptr tree = (tree_ptr)malloc(sizeof(tree_node));
// 容错判断
if (NULL == tree)
{
perror("init malloc error\n");
return NULL;
}
// 存数据
tree->data = num;
// 判断当前节点是否有左孩子:公式
if (2 * num <= size)
// 有则生成,递归循环
tree->lchild = initTree(size, 2*num);
else
tree->lchild = NULL;
// 判断当前节点是否有右孩子:公式
if (2 * num + 1 <= size)
// 有则生成,,递归循环
tree->rchild = initTree(size, 2 * num + 1);
else
tree->rchild = NULL;
return tree;
}
// 前序:根左右
void preOrder(tree_ptr tree)
{
if (tree == NULL)
{
return;
}
printf("%d ", tree->data);
preOrder(tree->lchild);
preOrder(tree->rchild);
}
//中序
void medOrder(tree_ptr tree)
{
if (tree == NULL)
return;
medOrder(tree->lchild); //左
printf("%d ", tree->data); //根
medOrder(tree->rchild); //右
}
//后序
void afterOrder(tree_ptr tree)
{
if (tree == NULL)
return;
afterOrder(tree->lchild); //左
afterOrder(tree->rchild); //右
printf("%d ", tree->data); //根
}
int main(int argc, char const *argv[])
{
tree_ptr tree = initTree(7, 1); //初始化指向数根节点的指针
printf("前序遍历:");
preOrder(tree);
printf("\n");
printf("中序遍历:");
medOrder(tree);
printf("\n");
printf("后序遍历:");
afterOrder(tree);
printf("\n");
return 0;
}
二叉树的创建及前中后序遍历
最新推荐文章于 2024-09-13 14:29:03 发布