这是LeetCode的问题,我使用C ++解决它,但是当我使用与Java相同类型的方法时,它会返回超出时间限制的错误。有谁知道原因?
问题在于:
将排序数组转换为二进制搜索树。给定一个数组,其中元素按升序排序,将其转换为高度平衡的BST。
这是我用Java编写的解决方案:
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode sortedArrayToBST(int[] num) {
if(num.length == 0) {
return null;
} else {
return sub(num, 0, num.length-1);
}
}
public TreeNode sub(int[] num, int start, int end) {
int indexRoot = (start+end+1) / 2;
TreeNode root = new TreeNode(num[indexRoot]);
if(indexRoot > start) {
root.left = sub(num, 0, indexRoot-1);
}
if(indexRoot < end) {
root.right = sub(num, indexRoot+1, end);
}
return root;
}
}
有什么方法可以加快速度吗?感谢。
答案 0 :(得分:0)
组织自己的堆栈 - 成对的索引。而不是逐步调用过程使用堆栈放置对并调用sub()作为最顶层的。
while (stack of pairs processing is not finished) {
//get next pair and process the pair
sub(next pair);
}
public TreeNode sub(int[] num, int start, int end) {
int indexRoot = (start+end+1) / 2;
TreeNode root = new TreeNode(num[indexRoot]);
if(indexRoot > start) {
root.left = addToStack(num, 0, indexRoot-1);
}
if(indexRoot < end) {
root.right = addToStack(num, indexRoot+1, end);
}
return root;
}
答案 1 :(得分:0)
代码中只有一个拼写错误。正确的应该如下。
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode sortedArrayToBST(int[] num) {
if(num.length == 0) {
return null;
} else {
return sub(num, 0, num.length-1);
}
}
public TreeNode sub(int[] num, int start, int end) {
int indexRoot = (start+end+1) / 2;
TreeNode root = new TreeNode(num[indexRoot]);
if(indexRoot > start) {
root.left = sub(num, start, indexRoot-1);
}
if(indexRoot < end) {
root.right = sub(num, indexRoot+1, end);
}
return root;
}
}