2020.10.11第一次解答:
解题思路
dbq对二叉树相关知识掌握真的都还给老师了
一开始看这题,哇,好高端,还要平衡。想了半天没有思路,寻思这应该是道medium题吧,结果一看是easy
我 好 菜 啊
于是重新开始想解题思路。
刚刚做了有关二叉搜索树的题目,二叉搜索树的性质是其中序遍历是递增序列。诶,那不巧了吗,题目给定的数组就是递增的。
根据这个性质,可以直接递归构造二叉树:
/**
* 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* buildBST(vector<int>& nums, int left, int right)
{
if (left >= right) return NULL;
int mid = (right + left) / 2;
TreeNode* root = new TreeNode(nums[mid]);
root->left = buildBST(nums, left, mid);
root->right = buildBST(nums, mid + 1, right);
return root;;
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
return buildBST(nums, 0, nums.size());
}
};
然后呢,参考了评论发现,有人指出用 (right + left) / 2 获取mid值会有溢出风险,稳妥的方法是 int mid = left + (right - left) / 2。
学习了。