【发布时间】:2014-09-02 19:35:44
【问题描述】:
我尝试通过两种方式解决这个问题。
最明显的解决方案是使用 BST 的标准插入操作,从根节点开始,递归地进一步进行。但是,插入每个节点需要log N 时间。因为我必须为 N 个节点做这件事,所以我完全需要NlogN。
所以我想到了如何切断几个调用,这样我就不需要遍历整个树来插入每个节点。
在这种方法中,在插入根之后,我只通过数组的一半(左半边)生成左子树,数组的右半边(右半边)生成右子树。
它的代码如下:
public static TreeNode createMinBST(int arr[], int start, int end){
if (end < start) {
return null;
}
int mid = (start + end) / 2;
TreeNode n = new TreeNode(arr[mid]);
n.left = createMinBST(arr, start, mid - 1);
n.right = createMinBST(arr, mid + 1, end);
return n;
}
这个,我很容易上来。但我发现很难分析这段代码的运行时间。请问有什么帮助吗? 您能否也说明一下如何到达运行时,以便我可以将该分析重用于其他问题?
【问题讨论】:
标签: data-structures big-o time-complexity binary-search-tree