【问题标题】:Preoder to BST constructionBST建设的预购
【发布时间】: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


    【解决方案1】:

    我找到了罪魁祸首。问题在于我单独编写的遍历函数。这里的 Node 函数采用 int 值,但是,在 Traversal 函数中,我打印了它的 String 值(我的 Node 类同时具有 String 和 Integer 作为键)。真是个愚蠢的错误!

    代码看起来是正确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      • 1970-01-01
      相关资源
      最近更新 更多