AVL树,malloc错误,递归函数,为什么强迫我添加这么多标题

时间:2018-06-23 20:05:45

标签: avl-tree

前几天,我试图自己实现AVL Tree ...尚未完成..而且我遇到了很多运行时错误...

基本上我有一个名为setbf的函数,该函数在树上的每个插入操作之后被调用。它计算或确切地重新计算每个节点的平衡因子(bf)...这里是实现

    struct tnode*setbf(struct tnode*ptr){

if(ptr==NULL)
return ptr;
ptr->bf=height(ptr->left)-height(ptr->right);           

ptr->left=setbf(ptr->left);
ptr->right=setbf(ptr->right);
return ptr;         
}

那很好...但是在插入根节点之后。当我继续插入另一个新节点...将新内存分配给newnode的malloc函数不起作用时,为什么呢? ...在删除setbf函数后,它的工作效果非常好。...我对插入节点的实现如下。...

    struct tnode*add(struct tnode*root,int val){
    struct tnode*newnode=(struct tnode*)malloc(sizeof(struct tnode*));
    newnode->info=val;
    newnode->left=newnode->right=NULL;//runtime error occurs

    if(root==NULL){
            root=newnode;
            }                       
     else{
struct tnode*tree=root;
struct tnode*ptree=NULL;
while(tree!=NULL){
                    if(val<tree->info){
                                        ptree=tree;
                                        tree=tree->left;

                    }
                    else{
                        ptree=tree;
                        tree=tree->right;
                    }                       


}   
if(val<ptree->info){

                ptree->left=newnode;

            }
else{
ptree->right=newnode;   
}
}


root=setbf(root)//after removing this line everything works fine...
return root;
}

我认为此实现的效率很低,因为它占用了大量内存。请问该如何做进一步改进?

0 个答案:

没有答案
相关问题