有序單向連結串列轉換為平衡搜尋二叉樹
阿新 • • 發佈:2019-02-07
class BSTNode { public: BSTNode(int v) { value = v; left = NULL; right = NULL; } int value; BSTNode *left; BSTNode *right; }; class ListNode { public: ListNode(int v) { value = v; left = NULL; right = NULL; } int value; ListNode *left; ListNode *right; }; BSTNode* sortedListToBST(ListNode* &list, int left, int right) { if (left > right) { return NULL; } int mid = left + (right-left)/2; BSTNode *left = sortedListToBST(list, left, mid-1); BSTNode *parent = new BSTNode(list->value); parent->left = left; list = list->next; BSTNode *right = sortedListToBST(list, mid+1, right); parent->right = right; return parent; } BSTNode* sortedListToBST(ListNode *list, int n) { return sortedArrayToBST(list, 0, n-1); }