![](https://img.haomeiwen.com/i5014400/da3765d571220fc5.png)
题意:给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。
解法:
1.分析题意,我们知道BST的中序遍历结果为递增数组
2.问题转换为,根据中序遍历结果,构造BST
3.递归创建BSP,以数组中间点,分数组为两部分
4.中间值,作为节点的值,递归以左部分的中间作为节点的left,递归以右部分的中间节点作为节点的right
解题遇到的问题
无
后续需要总结学习的知识点
无
##解法1
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
// 如果nums为空,则直接返回空
if (nums == null || nums.length == 0) {
return null;
}
return getResultNode(nums, 0, nums.length - 1);
}
/**
* 递归创建BSP,以数组中间点,分数组为两部分
* 中间值,作为节点的值,递归以左部分的中间作为节点的left,递归以右部分的中间节点作为节点的right
*/
private TreeNode getResultNode(int[] nums, int left, int right) {
if (left > right) {
return null;
}
int mid = (left + right) / 2;
TreeNode node = new TreeNode(nums[mid]);
node.left = getResultNode(nums, left, mid - 1);
node.right = getResultNode(nums, mid + 1, right);
return node;
}
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
}
网友评论