
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
public:TreeNode *sortedListToBST(ListNode *head) { int len = getListLen(head); if(len == 0) return NULL; return generateBST(head,0,len-1);}private:int getListLen(ListNode* head){ int len = 0; while(head != NULL){ len++; head = head->next; } return len;}TreeNode* generateBST(ListNode* head, int l, int r){ if(l>r) return NULL; int mid = l + (r-l)/2; ListNode* p = head; for(int i=l; i<mid; i++){ p = p->next; } TreeNode* root = new TreeNode(p->val); root->left = generateBST(head,l,mid-1); root->right = generateBST(p->next,mid+1,r);//相应的需要变化}//Approach 2: 自底而上,O(n)TreeNode* generateBST(ListNode* &head, int l, int r){//引用 if(l>r) return NULL; int mid = l + (r-l)/2; TreeNode* leftNode = generateBST(head,l,mid-1);//返回子链的根 //head 如何变化?????为何指向链中点 TreeNode* root = new TreeNode(head->val);//没明白 head = head->next; TreeNode* rightNode = generateBST(head,mid+1,r); root->left = leftNode; root->right = rightNode;}




近期评论