- 二叉搜索树(BST):整个二叉树的每个结点都满足其左子树上的所有结点值小于其自身的值,右子树上的所有结点值大于其自身的值,对二叉搜索树进行中序遍历得到的结果为升序数组
- 中序遍历:即按照左子树,根,右子树的顺序进行遍历得到的结果,并且其左右子树也要以中序的方式遍历
- 思路:题目中给出的数组已经是升序排列,所以即是对要求的二叉树的中序遍历结果。题目又要求需要平衡二叉树,所以每次要找到给定数组的中间元素作为根结点,而根节点左边需要的子树由中间元素左边的子数组构成,右边的子树由中间元素右边的子数组构成,使用递归进行构建即可,函数主要逻辑为:
找到数组中间元素
将中间元素左边元素放入数组l
将中间元素右边元素放入数组r
创建新结点n,n中数据为中间元素
递归调用自身并传入l数组构建n的左子树
递归调用自身并传入r数组构建n的右子树
返回新结点
class Solution
{
public:
TreeNode* sortedArrayToBST(vector<int>& nums)
{
if (nums.empty()) return NULL;
vector<int> left_nums, right_nums;
int mid = nums.size() * 0.5;
for (int i = 0; i < nums.size(); i++)
{
if (i < mid)
left_nums.push_back(nums[i]);
else if (i > mid)
right_nums.push_back(nums[i]);
}
TreeNode* node= new TreeNode(nums[mid]);
if(!left_nums.empty())
node->left = sortedArrayToBST(left_nums);
if(!right_nums.empty())
node->right = sortedArrayToBST(right_nums);
return node;
}
};