面试题 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 };

 

posted @ 2021-03-29 16:32  Mrsdwang  阅读(44)  评论(1编辑  收藏  举报