刚学二叉树,编了个程序,不知道哪错了.求大神修改
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
struct node *lchild,*rchild;
int key;
}BTnode,*BTree;
void Insert(BTree s,int key);
void CreatTree(BTree s,int n);
BTree serch(BTree s,int key);
void CreatTree(BTree s,int n)//创建树
{
int i;
int key;
for(i=0;i<n;i++)
{
scanf("%d",&key);
Insert(s,key);
}
}
void Insert(BTree s,int key)//插入数据
{
BTree p;
int flao=0;
if(s==NULL)
{
p=(BTree)malloc(sizeof(node));
p->key=key;
p->rchild=NULL;
p->lchild=NULL;
s=p;
}
else if(key>s->key)
Insert(s->rchild,key);
else if(key<s->key)
Insert(s->lchild,key);
}
BTree serch(BTree s,int key)//查找
{
if(s==NULL)
return 0;
if(s->key==key)
return s;
else if(key>s->key)
return serch(s->rchild,key);
else
return serch(s->lchild,key);
}
int main()
{
BTnode s;
int key,n=5;
printf("输入需要构建的数据\n");
CreatTree(&s,n);
return 0;
}
这个还没编完,中途试下之后发现一输入数据就弹出个框提示错误了,弄了好久不知道哪里错了,求大神帮忙
= =
[解决办法]
if(s==NULL){
p=(BTree)malloc(sizeof(node));
p->key=key;
p->rchild=NULL;
p->lchild=NULL;
s=p;
}
[解决办法]
仅供参考:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node {
char *word;
struct node *left, *right;
};
struct node *tree;
void showTree(struct node *aTree) {
if (aTree == NULL) return;
printf(" @%p: %s \t/%p\t\t\\%p\n", aTree, aTree->word, aTree->left, aTree->right);
showTree(aTree->left);
showTree(aTree->right);
}
struct node *nodeWith(char *aWord) {
struct node *node;
node = (struct node *)calloc(1,sizeof(struct node));
node->word = aWord;
return (node);
}
// Pretty much as Rubin started it on the board and others refined
struct node *findOrInsert(struct node *aTree, char *aWord) {
int cmp;
printf("findOrInsert(...%s\n", aWord);
if ((cmp = strcmp(aWord, aTree->word)) == 0) return(aTree);
if (cmp < 0) {
if (aTree->left) return (findOrInsert(aTree->left, aWord));
aTree->left = nodeWith(aWord);
return (aTree->left);
} else {
if (aTree->right) return (findOrInsert(aTree->right, aWord));
aTree->right = nodeWith(aWord);
return (aTree->right);
}
}
int main() {
tree = (struct node *)calloc(1,sizeof(struct node));
tree->word = "root";
showTree(tree);
findOrInsert(tree, "leave");
showTree(tree);
findOrInsert(tree, "house");
showTree(tree);
findOrInsert(tree, "mouse");
showTree(tree);
findOrInsert(tree, "house");
showTree(tree);
return 0;
}
// @00411900: root /00000000 \00000000
//findOrInsert(...leave
// @00411900: root /00411870 \00000000
// @00411870: leave /00000000 \00000000
//findOrInsert(...house
//findOrInsert(...house
// @00411900: root /00411870 \00000000
// @00411870: leave /00411830 \00000000
// @00411830: house /00000000 \00000000
//findOrInsert(...mouse
//findOrInsert(...mouse
// @00411900: root /00411870 \00000000
// @00411870: leave /00411830 \004117F0
// @00411830: house /00000000 \00000000
// @004117F0: mouse /00000000 \00000000
//findOrInsert(...house
//findOrInsert(...house
//findOrInsert(...house
// @00411900: root /00411870 \00000000
// @00411870: leave /00411830 \004117F0
// @00411830: house /00000000 \00000000
// @004117F0: mouse /00000000 \00000000
//