面试题 04.02. Minimum Height Tree LCCI
仅供自己学习
思路:
因为要建立的最小高度的的二叉搜索树,且已经升序排序,根据左小右大的原理,我们可以通过二分,每次以部分区间的中心节点作为父亲节点,这样能保持两端平衡而达到最小高度。再将mid点左边的作为左子树再次递归,右边作为右子树再次递归,就能满足左小右大。
代码:
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 TreeNode* dfs(vector<int>& nums,int left,int right){ 13 if(left>right) return nullptr; 14 int mid = (left+right)>>1; 15 TreeNode* root = new TreeNode(nums[mid]); 16 root->left=dfs(nums,left,mid-1); 17 root->right = dfs(nums,mid+1,right); 18 return root; 19 20 } 21 TreeNode* sortedArrayToBST(vector<int>& nums) { 22 return dfs(nums,0,nums.size()-1); 23 } 24 25 };