Tnode* convert2BST(List *head) { if(head==NULL) return NULL; List *middle,*l,*r; getmiddleNsplit(l,middle,r); Tnode* root=(Tnode*)malloc(sizeof(Tnode)); Tnode->data=middle->data; Tnode->left=convert2BST(l); Tnode->right=convert2BST(r); }
TreeNode *convert2BST(ListNode *&head, int start, int end) { if(start > end) return NULL; int mid = (start + end) / 2; TreeNode *left = convert2BST(head, start, mid - 1); TreeNode *node = new TreeNode(head->val); head = head->next; TreeNode *right = convert2BST(head, mid + 1, end); node->left = left; node->right = right; return node; }
TreeNode *sortedListToBST(ListNode *head) { int n = 0; ListNode *iter = head; while(iter) { n ++; iter = iter->next; } return convert2BST(head, 0, n - 1); }