1.二叉树的先序非递归算法
#include<stdio.h>
#define MaxSize 100
#include<malloc.h>
#define N -1 //代表栈底
typedef struct node
{
char data;
struct node* lchild;
struct node* rchild;
}BTNode;
void CreateBTree(BTNode*& b, const char* str)
{
BTNode* st[MaxSize], * p = NULL;
char ch;
int j, top, k;
j = 0;
top = -1;
ch = str[j];
b = NULL;
while (ch != 0)
{
switch (ch)
{
case '(':++top; st[top] = p; k = 1; break;
case ')':--top; break;
case ',':k = 2; break;
default:p = (BTNode*)malloc(sizeof(BTNode));
p->data = str[j]; //p->data=ch;
p->lchild = NULL;
p->rchild = NULL;
if (!b)
b = p;
else
{
switch (k)
{
case 1:st[top]->lchild = p; break;
case 2:st[top]->rchild = p; break;
}
}
}
j++;
ch = str[j];
}
}
void PreOrder(BTNode* b)
{
BTNode* st[MaxSize], * p;
int top = N;
if (b)
{
st[++top] = b;
while (top >= 0)
{
p = st[top];
top--;
printf("%c ", p->data);
if (p->rchild)
{
st[++top] = p->rchild;
}
if (p->lchild)
{
st[++top] = p->lchild;
}
}
printf("\n");
}
}
int main()
{
BTNode *b;
CreateBTree(b, "A(B(D(,G)),C(E,F))");
printf("二叉树的先序非递归算法\n");
PreOrder(b);
return 1;
}
2.二叉树先序非递归算法运行结果