结构体
typedef char datatype_tree;
typedef struct tree_node_t
{
datatype_tree data; // 数据域
struct tree_node_t *lchild; // 左子left
struct tree_node_t *rchild; // 右子right
} bitree_node_t, *bitree_list_t;
头文件
#ifndef _BITREE_H_
#define _BITREE_H_
#include <stdio.h>
#include <stdlib.h>
typedef char datatype_tree;
typedef struct tree_node_t
{
datatype_tree data; // 数据域
struct tree_node_t *lchild; // 左子left
struct tree_node_t *rchild; // 右子right
} bitree_node_t, *bitree_list_t;
// 1.创建一棵树
bitree_list_t CreateBitree(int n, int i);
// 2.遍历前序
void PreOrder(bitree_list_t t);
// 中序
void InOrder(bitree_list_t t);
// 后序
void PostOrder(bitree_list_t t);
// 释放
void dele(bitree_list_t t);
#endif
函数封装
#include "tree.h"
// 1.创建一棵树
bitree_list_t CreateBitree(int n, int i)
{
// 创建一个根节点
bitree_node_t *t = (bitree_node_t *)malloc(sizeof(bitree_node_t));
if (t == NULL)
{
printf(" t mallloc error \n");
return NULL;
}
t->data = i;
// 判断左孩子是否存在
if (2 * i <= n)
{
// 左孩子如果存在,就创建左孩子节点
t->lchild = CreateBitree(n, 2 * i);
}
else
{
t->lchild = NULL;
}
// 判断右孩子
if (2 * i + 1 <= n)
{
// 右孩子如果存在,就创建右孩子节点
t->rchild = CreateBitree(n, 2 * i + 1);
}
else
{
t->rchild = NULL;
}
return t;
}
// 2.遍历前序
void PreOrder(bitree_list_t t)
{
if (t == NULL)
{
return;
}
// 根
printf("%d ", t->data);
// 左孩子
if (t->lchild != NULL)
PreOrder(t->lchild);
// 右孩子
if (t->rchild != NULL)
PreOrder(t->rchild);
}
// 中序
void InOrder(bitree_list_t t)
{
// 左孩子
if (t->lchild != NULL)
InOrder(t->lchild);
// 根
printf("%d ", t->data);
// 右孩子
if (t->rchild != NULL)
InOrder(t->rchild);
}
// 后序
void PostOrder(bitree_list_t t)
{
// 左孩子
if (t->lchild != NULL)
PostOrder(t->lchild);
// 右孩子
if (t->rchild != NULL)
PostOrder(t->rchild);
// 根
printf("%d ", t->data);
}
// 释放树
void dele(bitree_list_t t)
{
if (t == NULL)
{
return;
}
if (t->lchild != NULL)
dele(t->lchild);
if (t->rchild != NULL)
dele(t->rchild);
free(t);
t = NULL;
return;
}