关于二叉树,有问题。。。

liangkaiyu 2008-12-04 10:35:04

#include "stdio.h"
#include "stdlib.h"

typedef struct bit{
int data;
struct bit *lch,*rch;
}bittree,*l;

void creat (l p)
{
int ch;
printf("Input data:\n");
scanf("%d",&ch);
if (ch == 0)
p = NULL;
else
{
p = (l)malloc(sizeof(bittree));
p->data = ch;
creat(p->lch);
creat(p->rch);
}
}

void exchange (l p)
{
l q;
q = p->lch;
p->lch = p->rch;
p->rch = q;
if(p->lch) exchange(p->lch);
if(p->rch) exchange(p->rch);
}

void print(l p)
{
if(p != NULL)
printf("%d",p->data);
if(p->lch) print(p->lch);
if(p->rch) print(p->rch);
}

void menu()
{
printf("1:creat \n");
printf("2:exchange\n");
printf("3:output \n");
printf("0:exit\n");
}

void main()
{
int i;
l p;
menu();
printf("what do you wanna to do?\n");
scanf("%d",&i);
while(i)
switch(i)
{
case 1:creat(p);break;
case 2:exchange(p);break;
case 3:print(p);break;
default:break;
}
}

在运行过程中老是会出现关闭窗口的提示,程序不够完善、、、
...全文
66 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangkaiyu 2009-02-21
  • 打赏
  • 举报
回复
N久前的帖子,
不过最初的问题我还是没有解决,
也说明我的问题挺拖的,
可能也因为没有很大的决心学好C吧、、、
不过帖子
还是结了吧
sagegz 2008-12-05
  • 打赏
  • 举报
回复
2F的程序没看到...不知道是什么原因.

这里叫引用,不叫取地址运算符号.

传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。
引用相关链接http://www.mcublog.com/blog/user1/5970/archives/2006/17090.html
liangkaiyu 2008-12-04
  • 打赏
  • 举报
回复
运行2楼的程序有以下提示:
89.obj : error LNK2005: "void __cdecl menu(void)" (?menu@@YAXXZ) already defined in 交换左,右子树.obj
89.obj : error LNK2005: _main already defined in 交换左,右子树.obj
Debug/交换左,右子树.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.

我的原程序还有一个问题就是
建立二叉树时无法返回

另外麻烦1楼具体解释下加个取地址符号有什么作用?
wuyu637 2008-12-04
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "stdlib.h"

typedef struct BIT{
int data;
struct BIT *lch,*rch;
}bittree,*l;

void creat (l& p)
{
int ch;
printf("Input data:\n");
scanf("%d",&ch);
if (ch == 0)
p = NULL;
else
{
p = (l)malloc(sizeof(bittree));
p->data = ch;
creat(p->lch);
creat(p->rch);
}
}

void exchange (l p)
{
l q;
q = p->lch;
p->lch = p->rch;
p->rch = q;
if(p->lch) exchange(p->lch);
if(p->rch) exchange(p->rch);
}

void print(l p)
{
if(p != NULL)
printf("%d",p->data);
if(p->lch) print(p->lch);
if(p->rch) print(p->rch);
}

void menu()
{
printf("1:creat \n");
printf("2:exchange\n");
printf("3:output \n");
printf("0:exit\n");
}

void main()
{
int i;
l p;
menu();
printf("what do you wanna to do?\n");
scanf("%d",&i);

while(i)
{

switch(i)
{
case 1:creat(p);break;
case 2:exchange(p);break;
case 3:print(p);break;
default:break;
}
fflush(stdin);
menu();
printf("what do you wanna to do?\n");
scanf("%d",&i);

}
}

zedzhao 2008-12-04
  • 打赏
  • 举报
回复


void creat (l &p) //用个引用就OK
{
int ch;
printf("Input data:\n");
scanf("%d",&ch);
if (ch == 0)
p = NULL;
else
{
p = (l)malloc(sizeof(bittree));
p->data = ch;
creat(p->lch);
creat(p->rch);
}
}

void exchange (l &p)
{
l q;
q = p->lch;
p->lch = p->rch;
p->rch = q;
if(p->lch) exchange(p->lch);
if(p->rch) exchange(p->rch);
}

69,377

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧