java

位置:IT落伍者 >> java >> 浏览文章

用栈实现二叉树先序遍历的非递归算法实践题


发布日期:2020年05月16日
 
用栈实现二叉树先序遍历的非递归算法实践题

/*syc*/

#include

#include

typedef char DataType;

typedef struct node{

DataType data;

struct node *lchild*rchild;

}BinTNode;

typedef BinTNode *BinTree;

int count;

void CreateBinTree(BinTree *T);

void PreorderN(BinTree T);

#define StackSize /*假定预分配的栈空间最多为*/

typedef BinTree SDataType; /*栈的元素类型设为整型*/

#define Error printf

typedef struct{

SDataType data[StackSize];

int top;

}SeqStack;

void InitStack(SeqStack *S) /*初始栈*/

{ S>top=;

}

int StackEmpty(SeqStack *S) /*判栈空*/

{return S>top==;

}

int StackFull(SeqStack *S) /*判栈满*/

{return S>top==StackSize;

}

void Push(SeqStack *S SDataType x) /*进栈*/

{if(StackFull(S))

Error(栈已满\n); /*上溢退出*/

else S>data[++S>top]=x; /*栈顶指针加后将x进栈*/

}

SDataType Pop(SeqStack *S) /*出栈*/

{if (StackEmpty(S))

Error(Stack underflow); /*下溢退出*/

else return S>data[S>top]; /*栈顶指针返回后将栈顶指针减*/

}

SDataType StackTop(SeqStack *S) /*取栈顶元素*/

{if (StackEmpty(S))

Error(栈已空\n);

return S>data[S>top];

}

main()

{BinTree T;

char chch;

printf(\n欢迎进入二叉树操作测试程序请选择\n);

ch=y;

while(ch==y || ch==Y)

{printf(\nA二叉树建立);

printf(\nB先序遍历(非递归));

printf(\nC退出\n);

scanf(\n%c&ch);

switch(ch)

{case A:

case a:printf(按二叉树带空指针的先序次序输入结点:\n);

CreateBinTree(&T);

printf(二叉树建立成功\n);break;

case B:

case b:printf(遍历的结果为:\n);

PreorderN(T);break;

case C:

case c:ch=n;break;

default:ch=n;

}

}

}

void CreateBinTree(BinTree *T)

{char ch;

scanf(\n%c&ch);

if (ch==) *T=NULL;

else {*T=(BinTNode*)malloc(sizeof(BinTNode));

(*T)>data=ch;

CreateBinTree(&(*T)>lchild);

CreateBinTree(&(*T)>rchild);

}

}

void PreorderN(BinTree T)

{/*先序遍历二叉树T的非递归算法*/

SeqStack *S;

BinTree p;

InitStack(S);Push(ST); /*根指针进栈*/

while(!StackEmpty(S))

{while(p=StackTop(S))

{ printf(%cp>data); /*访问入栈结点的数据域*/

Push(Sp>lchild); /*向左走到尽头*/

}

p=Pop(S); /*空指针退栈*/

if (!StackEmpty(S)) /*输出结点向右一步*/

{p=Pop(S);

/* printf(%cp>data); */

Push(Sp>rchild);

}

}

}/*PreorderN */

               

上一篇:有限期作业排序和判断无向图的关节点算法设计源代码

下一篇:计算机应用专业上机考试指导:排序算法的各趟排序算法