文档讲解:https://programmercarl.com/0108.将有序数组转换为二叉搜索树.html#思路
力扣题目:https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/
这道题可以偷懒将二叉树写成一条队列形式,但是没必要,主要思路如下:
- 找到数组中心值作为root根节点,左边作为左子树,右边作为右子树。
- 进入递归部分,每次选中中心作为根节点,当左范围大于右范围递归终止。
- 最后返回整棵树。
cpp
class Solution {
public:
TreeNode *travesal(vector<int>&nums, int left, int right)
{
//判断终止条件
if(left > right) return NULL;
int mid = (left + right)/2;
TreeNode *root= new TreeNode(nums[mid]);
//递归
root->left = travesal(nums, left, mid-1);
root->right = travesal(nums, mid+1, right);
return root;
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
TreeNode *result = travesal(nums, 0, nums.size()-1);
return result;
}
};