【问题标题】:How to convert sorted Arraylist to BST如何将排序的 Arraylist 转换为 BST
【发布时间】:2018-10-01 18:26:17
【问题描述】:

我有以下代码可以使用,如何让这个方法创建一个 BST。我正在使用 Elements。我正在使用可以执行 "T.setRoot()","n.getRightChild()","n.setLeftChild()" 等的自定义导入,这应该不难弄清楚.

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

     BTree<E> T = new BTree<E>();
        //TODO
     return T;
 }     

如何创建一个递归方法来遍历元素的 Arraylist 并将它们添加到 BST。我想保持这个结构完整。我发现的所有示例都是在 arraylist 包含整数时使用的,这使得以元素形式实现它们非常困难。 BST 必须平衡。

我已尝试关注:

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

但这显然没有用。

这是我目前正在使用的:

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

     BTree<E> T = new BTree<E>();

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


     return T;
}

不知道从这里去哪里。我应该以某种方式从 x 遍历数组列表以找到 2 个孩子的元素并递归地执行此操作。有什么建议么?

【问题讨论】:

  • 我假设你会 a) 实现你的 BST(添加、查找、删除等),然后 b) 从原始源复制元素(它可以是 任何东西 -不只是一个“排序的 Arraylist”)一次。问:“复制每个”是你唯一的选择,不是吗?另外:您需要为非 int 值实现 Comparable interface
  • 问题是它也必须平衡。
  • public static &lt;E&gt; Set&lt;E&gt; taulukostaPuu(ArrayList&lt;E&gt; list) { return new TreeSet&lt;E&gt;(list); }

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


【解决方案1】:

你检查过这个click here 了解 BST 是一个很好的开始,以防你谈论简单的 BST。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
  • 2022-01-19
  • 2021-02-21
  • 1970-01-01
相关资源
最近更新 更多