2017-05-11 124 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'是字符串,所以將節點設置爲正確或者左邊。 –