设为首页
收藏本站
开启辅助访问
切换到窄版
登录
立即注册
中问网首页
我的收藏
站长博客
搜索
搜索
本版
帖子
用户
第一问答网
»
论坛
›
中问网
›
问答
›
C语言二叉树非递归遍历
返回列表
发新帖
C语言二叉树非递归遍历
[复制链接]
11
|
2
|
2010-4-9 21:43:05
|
显示全部楼层
|
阅读模式
我们今天讲了一点 我写了下函数部分。。其实我也不太懂!void PreOrderTraverse(struct tree *p)/*进行先序遍历*/{ top=0;
bool; do{
while(p)
{
s[top]=p;
top++;
p=p->lch;
top--;
if(top==0)
bool=0;
else{
top--;
p=s[top];
printf(p->data);
p=p->rch;
}}while(bool)}void InOrderTraverse(struct tree *p)/*进行中序遍历*/{ top=0; bool; do{
while(p)
{
s[top]=p;
top++;
p=p->lch;
if(top==0)
bool=0;
else{
top--;
p=s[top];
printf(p->data);
p=p->rch;
}}while(bool)}后序遍历我也不怎么会写!不过我可以给你说一下原理:先是一个p->data入栈,入栈的时候给它标记下,用i=1记一下,然后是他的左子树,p=p->lch;p->data要出栈,这时候做一次判断。看P的标记i是多少,是1的话就不让他出来,返回去并且i+1,变成2;然后继续前面的动作!等到第二次出栈时做同样的判断,i=2,就出栈!并输出!!希望对你有所帮助!
回复
使用道具
举报
千问
|
2010-4-9 21:43:05
|
显示全部楼层
汗,兄弟,非递归算法你在网上一搜遍地都是,数据结构课程必讲的~
回复
使用道具
举报
千问
|
2010-4-9 21:43:05
|
显示全部楼层
难为我了
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
千问
主题
0
回帖
4882万
积分
论坛元老
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
积分
48824836
加好友
发消息
回复楼主
返回列表
问答
热门排行