1

これが私のコードです。バグを教えてください。問題は、指定された順序付きリンク リストを二分探索木に変換することです。

ありがとう。

struct treenode* makeBSTnode(struct node* head)
{
    struct treenode *root=(struct treenode*)malloc(sizeof(struct treenode));
    root->data = head->data;
    root->leftchild = NULL;
    root->rightchild = NULL;
    return root;
}


struct treenode* makeBST(struct node **head,int iterations)
{
    if(iterations==0)
    {
        /*this is the code for the base condition*/    
        struct treenode *root=(struct treenode*)malloc(sizeof(struct treenode));
        root = makeBSTnode(*head);
        return root;
    }
    else
    {
        /*this is for the case when the node is not single but should be broken down into parts*/
        struct node *leftchildnode=NULL,*rightchildnode=NULL,*rootnode=NULL,*temp;
        temp = (struct node*)malloc(sizeof(struct node));
        struct treenode *root = (struct treenode*)malloc(sizeof(struct treenode)); 
        int limit = (int)ceil((float)(3*iterations)/2);
        for(int i=1;i<=limit;i++)
        {
            if(i==(int)ceil((float)iterations/2))
            {
                leftchildnode = (struct node*)malloc(sizeof(struct node));
                leftchildnode = *head;
            }
            else if(i==iterations)
            {
                rootnode = (struct node*)malloc(sizeof(struct node));
                rootnode = *head;
            }
            else if(i==(int)ceil((float)(3*iterations)/2))
            {
                rightchildnode = (struct node*)malloc(sizeof(struct node));
                rightchildnode = *head;
            }
            if(*head)
            (*head) = (*head)->next;
            else
            break;
        }
        root = makeBSTnode(rootnode);
        root->leftchild = makeBST(&temp,(int)ceil((float)iterations/2));
        root->rightchild = makeBST(&rootnode,(int)ceil((float)(3*iterations/2)));
        return root;
    }
}

この makeBST 関数を main で次のように呼び出しました。 root = makeBST(&head,(int)ceil((float)length/2));

4

0 に答える 0