📅  最后修改于: 2023-12-03 15:28:44.896000             🧑  作者: Mango
给定1到n的整数序列,将它们按中序遍历的顺序放入一棵完整的二叉搜索树中。在该树中,根节点的值为左子树中的最大值,右子树中的最小值。
第一行包含一个整数n,表示整数序列的长度。
一行空格分隔的n个整数,表示按中序遍历顺序放入完整的二叉搜索树后的结果。
输入:
3
输出:
2 1 3
由于要构成一棵完整的二叉树,根节点需要分别取到左右子树的中位数,然后分别递归构造左右子树。
先考虑如何求出中位数,显然当n为偶数时,不同的中位数有两个,此处取其中一个即可。
int mid = (left + right) / 2;
然后就可以递归构造左右子树了,具体实现参见代码。
public class Solution {
public TreeNode sortedListToBST(int[] nums) {
return build(nums, 0, nums.length - 1);
}
private TreeNode build(int[] nums, int left, int right) {
if (left > right) {
return null;
}
int mid = (left + right) / 2;
TreeNode root = new TreeNode(nums[mid]);
root.left = build(nums, left, mid - 1);
root.right = build(nums, mid + 1, right);
return root;
}
}
时间复杂度为O(n),空间复杂度为O(logn)。