これが私のコードです。バグを教えてください。問題は、指定された順序付きリンク リストを二分探索木に変換することです。
ありがとう。
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));