#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data; //数据域存数据
struct node *lchild; //左子
struct node *rchild; //右子
} node_t, *node_p;
//创建二叉树,用递归函数创建
node_p CreateBitree(int n, int i) //i 根节点的编号,n:节点数
{
//创建根节点
node_p r = (node_p)malloc(sizeof(node_t));
if (NULL == r)
{
perror("r malloc err");
return NULL;
}
//初始化根节点
r->data = i;
if (2 * i <= n)
r->lchild = CreateBitree(n, 2 * i);
else
r->lchild = NULL;
if (2 * i + 1 <= n)
r->rchild = CreateBitree(n, 2 * i + 1);
else
r->rchild = NULL;
return r;
}
//前序
void PreOrder(node_p r)
{
if (NULL == r)
return; //直接结束函数无返回值
printf("%d ", r->data); //根
if (r->lchild != NULL)
PreOrder(r->lchild); //左
if (r->rchild != NULL)
PreOrder(r->rchild); //右
}
//中序
void InOrder(node_p r)
{
if (NULL == r)
return; //直接结束函数无返回值
if (r->lchild != NULL)
InOrder(r->lchild); //左
printf("%d ", r->data); //根
if (r->rchild != NULL)
InOrder(r->rchild); //右
}
//后序
void PostOrder(node_p r)
{
if (NULL == r)
return; //直接结束函数无返回值
if (r->lchild != NULL)
PostOrder(r->lchild); //左
if (r->rchild != NULL)
PostOrder(r->rchild); //右
printf("%d ", r->data); //根
}
int main(int argc, char const *argv[])
{
node_p root = CreateBitree(5, 1);
PreOrder(root);
printf("\n");
InOrder(root);
printf("\n");
PostOrder(root);
printf("\n");
return 0;
}
创建节点为5的二叉树
最新推荐文章于 2024-10-01 22:00:18 发布