1. 程式人生 > >[LeetCode] Convert Sorted Array to Binary Search Tree 將有序陣列轉為二叉搜尋樹

[LeetCode] Convert Sorted Array to Binary Search Tree 將有序陣列轉為二叉搜尋樹

Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

這道題是要將有序陣列轉為二叉搜尋樹,所謂二叉搜尋樹,是一種始終滿足左<根<右的特性,如果將二叉搜尋樹按中序遍歷的話,得到的就是一個有序陣列了。那麼反過來,我們可以得知,根節點應該是有序陣列的中間點,從中間點分開為左右兩個有序陣列,在分別找出其中間點作為原中間點的左右兩個子節點,這不就是是二分查詢法的核心思想麼。所以這道題考的就是二分查詢法,程式碼如下:

/**
 * Definition for binary tree
 * 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) { return sortedArrayToBST(num, 0 , num.size() - 1); } TreeNode *sortedArrayToBST(vector<int> &num, int left, int right) { if (left > right) return NULL; int mid = (left + right) / 2
; TreeNode *cur = new TreeNode(num[mid]); cur->left = sortedArrayToBST(num, left, mid - 1); cur->right = sortedArrayToBST(num, mid + 1, right); return cur; } };