【问题标题】:Sorted array to BST排序数组到 BST
【发布时间】:2019-03-06 19:04:11
【问题描述】:

我正在尝试从排序数组中创建 BST。我知道如何做到这一点的逻辑,我只需要一种方法来获得根两侧的中点。 我正在使用具有 setRightChild() 和 getRightChild() 等的自定义导入,应该不难弄清楚它们的含义。据我所知:

    public static <E> BTree<E> taulukostaPuu(ArrayList<E> L) {

     BTree<E> T = new BTree<E>();
     buildBST(L,T);
     return T;
}       
     private static <E> void buildBST(ArrayList<E> L,  BTree<E> T) {
         int n = L.size();
         if (n == 0)
             return;

         E x = L.get((L.size()/2) + (L.size() % 2));
         T.setRoot(new BTreeNode<E>(x));

     }
   } 

我想始终保持这种结构。有什么建议如何进行吗?

我已经做到了这一点,但我正在使用元素,所以不知道如何进行这项工作。

  public static <E> BTree<E> taulukostaPuu(ArrayList<E> L) {

     BTree<E> T = new BTree<E>();
     buildRecursively(L,L.get(0),L.get(L.size()-1),T);
     return T;
}       

private static <E> void buildRecursively(ArrayList<E> L,E start,E end,BTree<E> T){

if (start.compareTo(end) < 0)
    return;
E x = L.get((L.size()/2) + (L.size() % 2));
int mid = (L.size() / 2);
T.setRoot(new BTreeNode<E>(x)); 
T.setLeftChild(buildRecursively(L, start, mid - 1));
T.setRightChild(buildRecursively(L, mid + 1, end));
}

【问题讨论】:

    标签: java sorting arraylist methods binary-search-tree


    【解决方案1】:

    您可以编写一个递归构建树的方法。

    方法返回类型/args 类似于BTreeNode&lt;E&gt; buildRecursively(ArrayList&lt;E&gt; list, int start, int end),每次调用都会执行以下操作:

    • 计算中间索引
    • 创建中间节点
    • 通过提供适当的 startend 参数来构建左子树
    • 与左子树类似地构建右子树(但你知道,在另一边)
    • 将左右子树附加到中间节点
    • 返回中间节点

    确切的顺序并不重要。

    最难的部分是避免off-by-one errors。 ;)

    【讨论】:

      猜你喜欢
      • 2020-11-01
      • 2018-01-04
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      相关资源
      最近更新 更多