【发布时间】:2016-02-04 19:34:01
【问题描述】:
我正在尝试从预购遍历数组中创建 BST。我编写了以下代码,但无法弄清楚我在哪里犯了错误。以下代码返回值为 null 的节点。我正在使用以下方法:
10 8 4 5 14 12
我将对它进行分区(删除凝视元素后):
8 4 5 和 14 12,(递归)。
public Node generateTree(int ar[], int low, int high) {
if (ar.length == 0 || low > high)
return null;
if (low == high)
return new Node(ar[low]);
int partitionPoint = findPartitionPoint(ar, low, high);
Node root = new Node(ar[low]);
if (partitionPoint != -1) {
root.left = generateTree(ar, low + 1, partitionPoint);
root.right = generateTree(ar, partitionPoint + 1, high);
} else {
root.left = generateTree(ar, low + 1, high);
}
return root;
}
private int findPartitionPoint(int ar[], int low, int high) {
if (high >= ar.length)
return -1;
for (int x = low; x <= high; x++) {
if (ar[x] > ar[low])
return x-1;
}
return -1;
}
【问题讨论】:
标签: binary-search-tree preorder