First , non-recursive sequential traversal
void Treversepreorder (struct btree *t)
{struct btree
;
int top=0;
while (p| | Top)
{
if (p)
{
printf ("%d", p->data);
stack[top++]=p;
p=p->left;
}
else
{
p=stack[--top];
p=p->right;}}}
second, non-recursive sequence traversal
void Treverseinorder (struct btree *t)
{struct btree
;
int top=0;
while (p| | Top)
{
if (p)
{
stack[top++]=p;
p=p->left;
}
else
{
p=stack[--top];
printf ("%d", p->data);
p=p->right;}}}
third, non-recursive subsequent traversal
void treversepostorder (struct btree *t) {struct btree;
int top=0; while (p| |
Top) {if (p) {stack[top++]=p;
p=p->left;
} else {p=stack[top-1];
if (p->right&&p->right!=r)//Right subtree, not empty and not accessed, you need to traverse {p=p->right;
stack[top++]=p;//Current Right sub-tree pressure stack p=p->left;
else//the right subtree is empty, direct access to {P=stack[--top];
printf ("%d", p->data);
R=P;//R Save node P=null; }
}
}
}