C++——将有序数组转换为二叉搜索树leetcode108
- 题目描述
- 思路
- 代码
题目描述
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵平衡二叉搜索树。
思路
二叉搜索树是任意左子树的节点值小于右子树的节点值,二叉搜索树的中序遍历是一个非递减的序列。平衡而擦拭是任意节点的左子树和右子树的高度差的绝对值不超过1的二叉树。考虑使用迭代,将序列中间点作为二叉搜索树的根节点,而将序列该位置左边临近值作为左子树根节点,右边值作为右子树根节点。左右子树同时也需要是二叉搜索树。
代码
TreeNode* func(vector<int>& nums)
{return BST(nums, 0, nums.size()-1);
}
TreeNode* BST(vector<int>& nums, int l, int r)
{return l>r ? nullptr : new TreeNode(nums[(l+r)/2], BST(nums, l, (l+r)/2-1), BST(nums, (l+r)/2+1, r));
}