#include <stdio.h>
#include <stdlib.h>
#define A 16
//二叉树前序遍历序列------参考输入
int buffer[16]={10,6,4,-1,-1,8,-1,-1,14,12,-1,-1,16,-1,-1,-100};
//二叉树结构体
typedef struct binary_tree_node
{
int data;
struct binary_tree_node* ltree;
struct binary_tree_node* rtree;
}Btnode;
//创建新节点
Btnode* create_node(void)
{
Btnode* node;
node=(Btnode*)malloc(sizeof(Btnode));
return node;
}
//据输入的前序序列递归创建二叉树
void create_tree(Btnode* &pnode)
{
int num;
scanf("%d",&num);
if(num!=-1)
{
pnode=create_node();
pnode->data=num;
create_tree(pnode->ltree);
create_tree(pnode->rtree);
}
else
{
pnode=NULL;
return;
}
return;
}
//递归方法中序遍历
void inorder_traversal(Btnode* pnode)
{
if(pnode!=NULL)
{
inorder_traversal(pnode->ltree);
printf("%d ",pnode->data);
inorder_traversal(pnode->rtree);
}
else
{
return;
}
return;
}
//非递归方法中序遍历
void inorder_traversal1(Btnode* root)
{
Btnode* s[A];
Btnode* pnode;
int m=0;
bool ltree=true;
pnode=root;
s[m++]=pnode;
while(pnode!=NULL)
{
if(ltree==true)
{
if(pnode->ltree!=NULL)
{
pnode=pnode->ltree;
s[m++]=pnode;
}
else
{
ltree=false;
pnode=s[--m];
printf("%d ",pnode->data);
}
}
else
{
if(pnode->rtree!=NULL)
{
printf("%d ",pnode->data);
pnode=pnode->rtree;
s[m++]=pnode;
ltree=true;
}
else
{
pnode=s[--m];
}
}
if(m==-1)
{
break;
}
}
}
int main(void)
{
Btnode* root;
printf("请输入构建二叉树所需的前序序列,其中-1代表空节点:\n\n");
create_tree(root);
printf("\n\n");
printf("Recursive inorder traversal result is:\n");
inorder_traversal(root);
printf("\n\n");
printf("Non-Recursive inorder traversal result is:\n");
inorder_traversal1(root);
printf("\n\n");
system("pause");
return 0;
}