| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1378 人关注过本帖
标题:中序遍历二叉树的非递归算法
只看楼主 加入收藏
ttaix
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-7-28
收藏
得分:0 
以下是引用zhu471712418在2007-9-24 12:27:51的发言:

是不是 把P的节点先弹出来啊 然后P取的节点的值 才能够指向右子树

,除了根结点,难道你还能从其他地方找到右子树的地址?

2007-09-24 14:54
zhu471712418
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-9-18
收藏
得分:0 


#define size 100
#define false 0
#define true 1

/*二叉树的二叉链表结点结构定义*/
typedef struct node
{
DataType data;
struct node * LChild;
struct node * RChild;
}BiTNode,*BiTree;

/*栈的顺序存储结构定义*/
typedef struct
{
stackelemtype elem[size];
int top;
}seqstack;


/*栈的初始化*/
void intistack(seqstack *s)
{ /*构造空栈s*/
s->top==-1;
}

/*进栈*/
int push(seqstack *s,stackelemtype x)
{
if(s->top==size-1)
return(false);
s->top++;
s->elem[s->top]=x;
return(true);
}

/*出栈*/
int Pop(seqstack *s,stackelemtype *x)
{
if(s->top==-1)
return(false);
else
{
*x=s->elem[s->top];
s->top--;
return(true);
}
}

/*检测链表是否为空*/
int isempty(seqlist s)
{
if(s->top==-1)
return(true);
else
return(false);
}

/*中序遍历二叉树的非递归算法(调用栈操作的函数)*/
void InOrde(BiTree root)
{ seqstack s;
bitree p;
InitStack(&s);
p=root;
while(p!=NULL||!IsEmpty(s))
{
if(p!=NULL)
{
Push(&s,p);
p=p->LChild;
}
else
{
Pop(&s,&p);
visit(p->data);
p=p->RChild;
}
}
}


这是楼上建议 我就按照意思 把函数的全部调用写了


现在我明白了 谢谢各位大哥的支持

2007-09-24 23:35
zhu471712418
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-9-18
收藏
得分:0 

非常感谢 ttaix 和 asmseeker让我明白了栈和中序遍历二叉树的非递归算法

这里还有个 goto 的用法


中序遍历二叉非递归算法初步




/*二叉树的二叉链表结点结构定义*/
typedef struct node
{
DataType data;
struct node * LChild;
struct node * RChild;
}BiTNode,*BiTree;

/*s[m]表示栈,top表示栈顶指针*/

void InOrde(BiTree root)
{ int top=0;
bitree p=root; /*遍历左子树*/
L1:if(p!=NULL)
{
top=top+2;
if(top>m) return; /*栈满溢出*/
s[top-1]=p; /*本层参数进栈*/
s[p]=L2; /*返回地址进栈*/
P=P->LChild; /*给下层参数赋值*/
goto L1; /*转向开始*/

L2:Visit(p->data); /*访问根*/
top=top+2;
if(top>m) return; /*栈满溢出处理*/
s[top-1]=p; /*遍历右子树*/
s[top]=L3;
p=p->RChild;
goto L1;
}
L3:if(top!=0)
{
addr=s[top];
p=s[top-1]; /*取回返回地址*/
top=top-2; /*退出本层参数*/
goto addr;
}
}



我看了思路理不清 还请帮一下忙 能够帮我解析一下这个思路是怎么进行的

特别是 goto 和加红的地方

2007-09-24 23:49
zhu471712418
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-9-18
收藏
得分:0 

我希望能来个人 帮我解析下

2007-09-25 21:04
zhu471712418
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-9-18
收藏
得分:0 

汗^^^^^^^^^^^^^

2007-09-27 22:29
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
去数据结构看我的二叉树帖子.

倚天照海花无数,流水高山心自知。
2007-09-27 23:34
快速回复:中序遍历二叉树的非递归算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017514 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved