【问题标题】:How to print a BST alphabetically?如何按字母顺序打印 BST?
【发布时间】:2017-10-09 23:21:31
【问题描述】:

我有一个按顺序遍历的 BST,所以它从 min 到 max 打印,但我也必须按字母顺序打印,我不知道如何,我尝试按顺序遍历,但它没有工作.

//Method to insert values to BST
    ABBNodo insertar(ABBNodo raiz, int data, String nombre, double salario){
        if(raiz==null){
            raiz=new ABBNodo(data, nombre, salario);
            raiz.setData(data);
            raiz.setNombre(nombre);
            raiz.setIzq(null); raiz.setDer(null);   
            }else{
                if(data<raiz.getData()) raiz.setIzq(insertar(raiz.getIzq(),data, nombre, salario));
                else if(data>raiz.getData()) raiz.setDer(insertar(raiz.getDer(),data, nombre, salario));
        }
        return raiz;
    }

//Recursive method for in-order traversal
        void inOrden(ABBNodo raiz){
            if(raiz!=null){
                inOrden(raiz.getIzq());
                System.out.println(raiz.getData()+" "+raiz.getNombre());
                inOrden(raiz.getDer());
            }
        }

【问题讨论】:

  • 创建另一个按字母顺序排列的 BST。或者将所有节点放入一个数组/列表中然后排序。
  • 如果您的 BST 是由 data 排序的,那么名称几乎将在树中以随机顺序排列。因此,没有树遍历可以按顺序为您提供名称。您需要收集所有名称,然后调用 sort 方法。

标签: java recursion data-structures binary-search-tree


【解决方案1】:

您发布的代码中没有任何内容涉及字母顺序;它仅适用于现有数据字段。

  • 将此代码复制到同一文件的底部。
  • 您将使用此副本创建一个 alpha BST。
    • 更改例程的名称。
    • 将插入例程更改为键入nombre 而不是data
  • 遍历原始树。当您遇到每个节点时,将该节点插入到新的(alpha)树中。

您现在有两棵树:一棵按数据排序,一棵按字母排序。

如果您只需要一组节点,那么您需要更新您的节点结构以获得第二组按字母顺序排列的指针。

【讨论】:

  • 如何在nombre 中集中插入例程?
  • 这几乎是让我为你写作业。您使用nombre 作为键而不是data。您已经为data 编写了代码,所以这应该是一个简单的替换。
  • 是的,但我无法比较设置节点的右或左,因为nombre 是字符串。
  • 阅读有关字符串比较的课程资料或文档。
猜你喜欢
  • 2018-06-07
  • 2020-08-18
  • 1970-01-01
  • 2020-04-01
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 2017-09-15
  • 2013-02-02
相关资源
最近更新 更多