| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 723 人关注过本帖
标题:[求助]树的非递归中序遍历 到底什么问题呢??
只看楼主 加入收藏
wxcd
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-5-8
收藏
 问题点数:0 回复次数:4 
[求助]树的非递归中序遍历 到底什么问题呢??

#include<stdlib.h>
#include<malloc.h>
#include<stdio.h>

#define ok 1;
#define error 0;

typedef struct sun{
char data;
struct sun *lchild;
struct sun *rchild;
}sun,*bittree;


typedef struct zhan{
int *base;
int *top;
int stacksize;
}zhan;

int initstack(zhan &s){
s.base=(int * )malloc(100* sizeof(int));
s.top =s.base;
s.stacksize=100;
return ok;}


int push(zhan &s,int e)
{*(s.top++)=e;
return ok;
}

int pop(zhan &s,int &b)
{ b=*(--s.top);
printf("%d",b);
return ok;

}

stackempty(zhan s){
if(s.top==s.base) {return ok;}
else {return error;}
}


createbittree(bittree &t)
{char ch;
printf("3\n");
scanf("%c",&ch);
if(ch==' ')
t=NULL;
else{
t=(bittree)malloc(sizeof(sun));
t->data=ch;
createbittree(t->lchild);
createbittree(t->rchild);
}
return ok;
}

print(char e)
{printf("%c",e);
return ok;}

int zhongf(bittree t)
{ zhan s;initstack(s);bittree p=t;
while (p||!stackempty(s))
push(s,p);
{if(p){
p=p->lchild;}
else {pop(s,p);
print(p->data);
p=p->rchild;}
}
}

void main(){ bittree t;
createbittree(t);
zhongf(t);

}
为什么无法向栈里压指针呢??

搜索更多相关主题的帖子: 遍历 递归 
2006-05-09 20:13
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
在定义入栈函数时把push(zhan *s,int e)中的int e改成push(zhan *s,bittree e)
就可以了

2006-05-09 22:07
wxcd
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-5-8
收藏
得分:0 

呵呵 注意到了 可还是有些问题。。
error C2440: '=' : cannot convert from 'struct sun *' to 'int' 改了后还是 int。。

2006-05-10 18:55
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 

pop(zhan &s,int &b)的返回类型是bittree


2006-05-10 22:05
白水
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-5-4
收藏
得分:0 

#include<stdlib.h>
#include<malloc.h>
#include<stdio.h>

#define ok 1;
#define error 0;

typedef struct sun{
char data;
struct sun *lchild;
struct sun *rchild;
}sun,*bittree;


typedef struct zhan{
bittree *base;
bittree *top;
int stacksize;
}zhan;

int initstack(zhan &s){
s.base=(bittree *)malloc(100*sizeof(bittree));
s.top=s.base;
s.stacksize=100;
return ok;}


int push(zhan &s,bittree e)
{*(s.top++)=e;
return ok;
}

int pop(zhan &s,bittree &b)
{ b=*(--s.top);
printf("%c",b);
return ok;

}

stackempty(zhan s){
if(s.top==s.base) {return ok;}
else {return error;}
}


createbittree(bittree &t)
{char ch;
printf("3\n");
scanf("%c",&ch);
if(ch==' ')
t=NULL;
else{
t=(bittree)malloc(sizeof(sun));
t->data=ch;
createbittree(t->lchild);
createbittree(t->rchild);
}
return ok;
}

print(char e)
{printf("%c",e);
return ok;}

int zhongf(bittree t)
{ zhan s;
initstack(s);
bittree p=t;
while (p||!stackempty(s))

{if(p){push(s,p);p=p->lchild;}
else {pop(s,p);
print(p->data);
p=p->rchild;}
}
return ok;
}

void main(){ bittree t;
createbittree(t);
zhongf(t);

}
仔细想了下 做了些改动 编译没问题。 可输出是乱码。
呵呵 再帮忙 看下 谢了。。

2006-05-11 17:54
快速回复:[求助]树的非递归中序遍历 到底什么问题呢??
数据加载中...
 
   



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

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