/***************************
* author:vivi
* date: 19-09-10
****************************/
#include <stdio.h>
#include <stdlib.h>
// function:直接插入排序
typedef struct BTNode
{
int data;
struct BTNode* lchild;
struct BTNode* rchild;
}BTNode,* BiTree;
int create(BiTree* T) //构建二叉树
{
int ch;
scanf("%d",&ch);
if(0 == ch)
{
*T = NULL;
return 0;
}
*T = (BiTree)malloc(sizeof(BTNode));
if(!*T)
{
printf("fail\n");
}
if(ch != 0)
{
(*T)->data = ch;
create(&((*T)->lchild));
create(&((*T)->rchild));
}
return 0;
}
typedef struct
{
BTNode* data[20];
int top;
}Stack;
void preOrderNonRecursion(BiTree T) //非递归先序遍历
{
Stack S;
S.top = -1;
if(T !=NULL)
{
BTNode *p;
S.data[++(S.top)] = T;
while(S.top != -1)
{
p = S.data[(S.top)--];
printf("%d",p->data);
if(p->rchild != NULL)
S.data[++(S.top)] = p->rchild;
if(p->lchild != NULL)
S.data[++(S.top)] = p->lchild;
}
}
}
int main() {
BiTree T;
printf("输入结点:\n");
create(&T);
printf("\n先序遍历序列:\n");
preOrderNonRecursion(T);
return 0;
}
c语言 二叉树先序遍历(非递归)
最新推荐文章于 2022-11-22 01:44:33 发布