刷題-力扣-面試題 04.02. 最小高度樹
阿新 • • 發佈:2022-02-13
題目連結
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/minimum-height-tree-lcci
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
題目描述
給定一個有序整數陣列,元素各不相同且按升序排列,編寫一個演算法,建立一棵高度最小的二叉搜尋樹。
示例:
給定有序陣列: [-10,-3,0,5,9], 一個可能的答案是:[0,-3,9,-10,null,5],它可以表示下面這個高度平衡二叉搜尋樹: 0 / \ -3 9 / / -10 5
題目分析
- 根據題目描述,構造一棵高度最小的BST(二叉排序樹),給定遞增陣列序列
- 二分構造樹節點,以nums的中間節點為根節點,左右兩邊序列分別構造左右子樹
程式碼
/** * 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* sortedArrayToBST(vector<int>& nums) { return sortedArrayToBST(nums, 0, nums.size() - 1); } private: TreeNode* sortedArrayToBST(std::vector<int>& nums, int left, int right) { if (right < left) { return nullptr; } int mid = (right - left) % 2 ? left + (right - left) / 2 + 1 : left + (right - left) / 2; TreeNode* root = new TreeNode(nums[mid]); root->left = sortedArrayToBST(nums, left, mid - 1); root->right = sortedArrayToBST(nums, mid + 1, right); return root; } };