2017-05-11 81 views
-3

我有一个BST是按顺序遍历的,所以它打印从最小到最大,但我也必须按字母顺序打印它,我不知道如何,我尝试按顺序遍历,但它没有工作。如何按字母顺序打印BST?

//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()); 
      } 
     } 
+2

按字母顺序创建另一个BST。或者将所有节点放入一个数组/列表中,然后对其进行排序。 – Andreas

+0

如果您的BST按'data'排序,那么这些名称将在树中随机排列。所以没有遍历树会按顺序给你命名。你需要收集所有的名字,然后调用'sort'方法。 – ajb

回答

0

在您的发布代码中没有任何地址符合字母顺序;它只适用于现有的数据字段。

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

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

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

+0

如何将插入例程集中在'nombre'中? –

+0

这几乎要求我为你写作业。你使用'nombre'作为键而不是'data'。你已经写了'data'的代码,所以这应该是一个简单的替代。 – Prune

+0

是的,但我不能比较,因为'nombre'是字符串,所以将节点设置为正确或者左边。 –