// 二叉树的"前序遍历"结果: A B C E D F
// 二叉树的"中序遍历"结果: C B A E D F
// 二叉树的"后序遍历"结果: C B F D E A
// 2017-04-30
#include "stdio.h"
#include "stdlib.h"
struct tree
{
char data;
struct tree *left;
struct tree *right;
};
typedef struct tree treenode;
typedef treenode *btree;
btree createbtree(char *data,int pos,int maxPos) //递归创建法
{
btree newnode;
if(data[pos]==0 || pos>maxPos)
{
return NULL;
}
else
{
newnode=(btree)malloc(sizeof(treenode));
newnode->data=data[pos];
newnode->left=createbtree(data,2*pos,maxPos);
newnode->right=createbtree(data,2*pos+1,maxPos);
return newnode;
}
}
void inorder(btree ptr)
{
if(ptr!=NULL)
{
inorder(ptr->left);
printf("%C ",ptr->data);
inorder(ptr->right);
}
}
void preorder(btree ptr)
{
if(ptr!=NULL)
{
printf("%C ",ptr->data);
preorder(ptr->left);
preorder(ptr->right);
}
}
void postorder(btree ptr)
{
if(ptr!=NULL)
{
postorder(ptr->left);
postorder(ptr->right);
printf("%C ",ptr->data);
}
}
int main()
{
btree root=NULL;
int i;
char data[16]={0,'A','B','E','C',0,0,'D',0,0,0,0,0,0,0,'F'};
root=createbtree(data,1,15);
printf("数组的顺序存储内容:\n");
for(i=1;i<16;i++)
{
if(data[i]==0)
{
printf("^ ");
}
else
{
printf("%C ",data[i]);
}
}
printf("\n二叉树的节点内容(前序遍历): ");
preorder(root);
printf("\n二叉树的节点内容(中序遍历): ");
inorder(root);
printf("\n二叉树的节点内容(后序遍历): ");
postorder(root);
printf("\n");
return 0;
}
