109. 有序鏈表轉換二叉搜索樹-c

給定一個單鏈表,其中的元素按升序排序,將其轉換爲高度平衡的二叉搜索樹。

本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。

示例:

給定的有序鏈表: [-10, -3, 0, 5, 9],

一個可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面這個高度平衡二叉搜索樹:

      0
     / \
   -3   9
   /   /
 -10  5

尋找中間節點:

struct TreeNode* sortedListToBST(struct ListNode* head){
  if (head ==NULL )
        return NULL;  
    struct ListNode *slow,*fast,*pre;
    fast =head;
    slow =head;
    pre=NULL;
    while(fast!=NULL && fast->next!=NULL ){
        fast =fast->next->next;
        pre=slow;
        slow =slow->next;
        
    }
    struct TreeNode *p;
    p =(struct TreeNode *)malloc(sizeof(struct TreeNode));
    p->val=slow->val;
    p->left=NULL;
    p->right=NULL;
    if (pre){
        pre->next=NULL;      
        p->left =sortedListToBST(head);
        p->right =sortedListToBST(slow->next);
    }
    return p;    
}

在提交時報錯

執行出錯信息:Line 96: Char 17: runtime error: member access within misaligned address 0xbebebebebebebebe for type 'struct TreeNode', which requires 8 byte alignment (TreeNode.c)

因此增加了兩行代碼,這樣在只有一個節點時,p的左右節點能有一個指向。

p->left=NULL;

p->right=NULL;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章