说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

我是不是太笨了???

编辑:说三道四文库 发布时间:2018-08-20 03:04
HTML文档下载 WORD文档下载 PDF文档下载
我想用一个创建一棵树,采用二叉链表的存储结构,程序代码如下:
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct BiTNode{
char data;
BiTNode *lchild;
BiTNode *rchild;
}BiTNode,*BiTree;

BiTNode *create_tree()

BiTNode *t;
char ch;
ch=getchar();
if((int)ch!=10){//区分按下回车键
if(ch=='#'){
return(NULL);
}else{
t=(BiTNode *)malloc(sizeof(BiTNode));
if(!t)exit(OVERFLOW);
t->data=ch; 
t->lchild=create_tree();
t->rchild=create_tree(); 
}
}
return(t);
}

main(){
BiTree bt;
bt=create_tree();
return 0;
}

上述程序有问题,只要遇到一个“#”,函数create_tree()就结束了,可我的本意是如果遇到一个“#”,只是表是当前结点的左(右)后代生成完毕,应返回上一层递归继续生成其他结点的后代,而且,我想的是函数最终返回根结点,好想也不对。谁能告诉我怎样采用二叉链表的结构,创建一棵二叉树,感谢!!!
你都return(NULL)了,当然函数create_tree()就结束了
那应该怎么做呢?
你的程序是没有大的错误的,只是在输入的时候,要注意,你按回车键的时候,create_tree会接受
它而直接执行到函数末尾。所以当你输入一个字符,然后按回车的时候,就直接把
t->lchild=create_tree();给盖过去了,直接到下面,所以这样当你输入#,然后回车,就直接退出了。
所以,你要满足你的要求,那么开始的时候不能敲回车的,就可以了,
UP
我已经按照你说的做了但还是不行。
呵呵,我好象还真明白了。
你的getch()函数每次在接收到你输入的信息后的一次会得到10''
例如你首先输入:1回车
将首先创建根1,然后会得到一个'',而且你已经处理了回车,此时,左接点被创建,然后转到了右接点的创建,此时需要输入一个2,然后。。。。。。
                        1
                   NULL     2
                         NULL    3
                             NULL    4
                                  NULL  #
当你输入“#”的时候全部返回。
你要把getch()换掉了。。。换成cin>>之类的
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct BiTNode{
char data;
BiTNode *lchild;
BiTNode *rchild;
}BiTNode,*BiTree;

BiTNode *create_tree()

BiTNode *t;
char ch;
cout<<"Please input a number:";
cin>>ch;
if(ch=='#'){
return(NULL);
}else{
t=(BiTNode *)malloc(sizeof(BiTNode));
if(!t)exit(0);
t->data=ch; 
t->lchild=create_tree();
t->rchild=create_tree(); 
printf("Create %c", ch);
}
return(t);
}

main(){
BiTree bt;
bt=create_tree();
return 0;
}
上面的程序是对的,应该基本符合楼主的想法了。
对是对,可以逻辑上有问题
程序倒是能够正确运行了,但结果是错误的。
终于完全正确了,谢谢各位!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘