LeetCode 109. 有序連結串列轉換為二叉樹
阿新 • • 發佈:2020-08-18
題目描述連結:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree/
解題思路:遞迴,分治。給出的連結串列為有序升序連結串列,找出中位數作為根節點,中位數之前的為左子樹,之後為右子樹。
如此遞迴在建立左子樹和右子樹即可。
LeetCode C++ 參考程式碼如下:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * };*/ /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* sortedListToBST(ListNode* head) { return buildTree(head,NULL); } ListNode* getMid(ListNode* left,ListNode* right){ ListNode *slow=left; ListNode *fast=left; while(fast!=right&&fast->next!=right){ slow=slow->next; fast=fast->next; fast=fast->next; } return slow; } TreeNode* buildTree(ListNode* left,ListNode* right){ if(left==right){ return NULL; } ListNode* mid=getMid(left,right); TreeNode* root=new TreeNode(mid->val); root->left=buildTree(left,mid); root->right=buildTree(mid->next,right); return root; } };