[CareerCup] 4.3 Create Minimal Binary Search Tree 建立最小二叉搜尋樹
阿新 • • 發佈:2018-12-27
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; } };