#include<stdio.h>
#include<stdlib.h>
typedef struct bnode {
int data;
struct bnode *lchild, *rchild;
} Bnode, *BTree;
void Visite(BTree t)
{
printf("%d ",t->data);
}
BTree Init_Node()
{
BTree btree;
btree=(BTree)malloc(sizeof(Bnode));//分配空间
if(btree)
{
btree->lchild=NULL;
btree->rchild=NULL;
}
return btree;
}
//递归创建树
void createTree(BTree t,int nodes[],int i)
{
BTree left,right;
if(2*i<=nodes[0])// 生成左孩子结点
{
left=Init_Node();
left->data=nodes[2*i];
t->lchild=left;
createTree(left,nodes,2*i);//以此结点为根结点,递归继续生成孩子结点}
if(2*i+1<=nodes[0])//生成右孩子结点
{
right=Init_Node();
right->data=nodes[2*i+1];
t->rchild=right;
createTree(right,nodes,2*i+1);//以此结点为根结点,递归继续生成孩子结点}
}
//先序遍历
void PreOrder(BTree t)
{
if(t)
{
printf("%d",t->data);
PreOrder(t->lchild);
PreOrder(t->rchild);
}
}
//中序遍历
void InOrder(BTree t)
{
if(t)
{
InOrder(t->lchild);
printf("%d",t->data);
InOrder(t->rchild);
}
}
//后序遍历
void PostOrder(BTree t)
{
if(t)
{
PostOrder(t->lchild);
PostOrder(t->rchild);
printf("%d",t->data);
}
}
//递归销毁树
void Destroy_Tree(BTree *Node)
{
if(*Node)
{
Destroy_Tree(&((*Node)->lchild));
Destroy_Tree(&((*Node)->rchild));
free(*Node);
*Node=NULL;
}
}
int main()
{
int n;
printf("请输入完全二叉树的结点总数:");
scanf("%d", &n);
int btree[n+1];
btree[0]=n;
//输入完全二叉树的节点
printf("请逐个输入完全二叉树的结点...\n");
int i,j;
for(i=1;i<=n;i++)
{
printf("请输入完全二叉树第%d个结点元素:",i);
scanf("%d", &btree[i]);
}
BTree root=Init_Node();
root->data=btree[1];
createTree(root,btree,1);
printf("\n先序遍历结果:");
PreOrder(root);
printf("\n中序遍历结果:");
InOrder(root);
printf("\n后序遍历结果:");
PostOrder(root);
Destroy_Tree(&root);
}。