二叉树结构声明:
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;
}
}
本文详细介绍了二叉树结构的声明,并提供了后序遍历的递归和非递归实现方式。通过使用栈进行非递归遍历,展示了算法的具体步骤和实现细节。
812

被折叠的 条评论
为什么被折叠?



