標籤:
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
思路:使用二分法,將list的中間節點作為根節點,然後分別處理list左半邊及右半邊,以此遞迴。
struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class Solution {public: TreeNode *sortedArrayToBST(vector<int> &num) { if(num.empty()) return NULL; TreeNode* root = new TreeNode(0); dfs(num,0,num.size()-1,root); return root; } void dfs(vector<int> &num,int start, int end,TreeNode* treeNode) { int size = end-start+1; if(size == 1) { treeNode->val = num[start]; return; } int mid = size/2 + start; treeNode->val = num[mid]; treeNode->left = new TreeNode(0); dfs(num,start,mid-1,treeNode->left); if(mid+1<=end) { treeNode->right = new TreeNode(0); dfs(num,mid+1,end,treeNode->right); } }};
108.Convert Sorted Array to Binary Search Tree(Array; Divide-and-Conquer, dfs)