首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

刚刚学二叉树,编了个程序,不知道哪错了.求大神修改

2013-12-22 
刚学二叉树,编了个程序,不知道哪错了.求大神修改#include stdio.h#include stdlib.htypedef struct no

刚学二叉树,编了个程序,不知道哪错了.求大神修改
#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
//

热点排行