二叉树结构声明:
typedef struct tree{
char data;
struct tree *leftson,*rightson;
}*tree_pointer;
一:模拟递归版
void my_postorder(tree_pointer node)
{
int top=-1;
tree_pointer stack[(int)max_stack_size],pre,root;
pre=root=node;
for(;;){
for(;node;node=node->leftson)
pushstack(stack,&top,node);
if(node==root) break;
pre=node;
}
二:非递归版
void iter_postorder(tree_pointer node)
{
int top=-1;
tree_pointer stack[(int)max_stack_size],pre;
pre=0;
pushstack(stack,&top,node);
for(;;){
node=popstack(stack,&top);
if(!node) break;
pushstack(stack,&top,node);
if(pre!=node->leftson&&pre!=node->rightson){
if(node->rightson) pushstack(stack,&top,node->rightson);
if(node->leftson) pushstack(stack,&top,node->leftson);
}
if(node->leftson==0&&node->rightson==0||pre==node->leftson||pre==node->rightson){
printf ("%c ",node->data);
(void)popstack(stack,&top);
}
pre=node;
}
}
typedef struct tree{
char data;
struct tree *leftson,*rightson;
}*tree_pointer;
一:模拟递归版
void my_postorder(tree_pointer node)
{
int top=-1;
tree_pointer stack[(int)max_stack_size],pre,root;
pre=root=node;
for(;;){
for(;node;node=node->leftson)
pushstack(stack,&top,node);
node=showstack(stack,&top);
if(!node->rightson || pre==node->rightson){
node=popstack(s,&top);
if(node==root) break;
pre=node;
node=0;
}
else{
pre=node;
node=node->rightson;
}
}
二:非递归版
void iter_postorder(tree_pointer node)
{
int top=-1;
tree_pointer stack[(int)max_stack_size],pre;
pre=0;
pushstack(stack,&top,node);
for(;;){
node=popstack(stack,&top);
if(!node) break;
pushstack(stack,&top,node);
if(pre!=node->leftson&&pre!=node->rightson){
if(node->rightson) pushstack(stack,&top,node->rightson);
if(node->leftson) pushstack(stack,&top,node->leftson);
}
if(node->leftson==0&&node->rightson==0||pre==node->leftson||pre==node->rightson){
printf ("%c ",node->data);
(void)popstack(stack,&top);
}
pre=node;
}
}