1. 程式人生 > >[CareerCup] 4.3 Create Minimal Binary Search Tree 建立最小二叉搜尋樹

[CareerCup] 4.3 Create Minimal Binary Search Tree 建立最小二叉搜尋樹

4.3 Given a sorted (increasing order) array with unique integer elements, write an algorithm to create a binary search tree with minimal height.

這道題給了我們一個有序的陣列,讓我們來生成一個最小高度的二叉搜尋樹,為了達到最小高度,肯定是儘可能的填成一個滿二叉樹,左子樹填滿,右子樹儘可能的填滿。而且要注意是二叉搜尋樹,左<根<右的性質不能忘。既然給了我們一個有序的陣列,那麼我們可以取中間的數字為根節點,然後左半段為左子樹,右半段為右子樹,然後再遞迴去分別再分,有點像二叉搜尋法的原理,程式碼不復雜,也不難懂,如下所示:

class Solution {
public:
    TreeNode* createMinimalBST(vector<int> &nums) {
        return createMinimalBST(nums, 0, nums.size() - 1);
    }
    TreeNode* createMinimalBST(vector<int> &nums, int start, int end) {
        if (start > end) return NULL;
        int mid = (start + end) / 2
; TreeNode *node = new TreeNode(nums[mid]); node->left = createMinimalBST(nums, start, mid - 1); node->right = createMinimalBST(nums, mid + 1, end); return node; } };