2011-05-04 97 views
1

我正在嘗試創建一個動畫了BTree的Java小程序。我有代碼來創建樹,但現在我試圖顯示它。我認爲最簡單的方法是按等級打印,但我無法弄清楚。下面的代碼是我的節點的構造函數。此外,如果任何人有更好的建議顯示我的樹,我將不勝感激。通過級別打印BTree

/*********************************************************************** 
* Class BTNode 
* The BTNode is nothing else than a Node in the BTree. This nodes can be 
* greater or smaller it depends on the users order. 
**/ 

class BTNode { 
    int order=0; 
    int nKey=0;   // number of keys stored in node 
    KeyNode kArray[];  // array where keys are stored 
    BTNode btnArray[]; // array where references to the next BTNodes is stored 
    boolean isLeaf;  // is the btnode a leaf 
    BTNode parent;  // link to the parent node 

    /** 
     * BTNode(int order, BTNode parent); 
     * Constructor, creats a empty node with the given order and parent 
     **/ 
    BTNode(int order, BTNode parent) { 
     this.order = order; 
     this.parent = parent; 
     kArray = new KeyNode[2 * order - 1]; 
     btnArray = new BTNode[2 * order]; 
     isLeaf = true; 
    } 

回答

3

您想對樹執行水平順序遍歷。如果空間不是一個限制因素,我建議建立一個你希望下一次訪問的節點隊列(在訪問時將他們的子節點添加到隊列尾部)。

+1

感謝您的想法。我最終使用了兩個隊列(將第一個隊列中的所有節點的子節點添加到第二個隊列,然後反之亦然),這樣我就可以跟蹤需要換行的時間。 – kfeeney 2011-05-05 06:15:04

1

我也會推薦一個水平訂單橫向。這裏是一些sudocode它:

Add root to queue 
while queue is not empty 
{ 
    r = queue.top() 
    process r 
    remove r from queue 
    add r's non-NULL children to the queue 
}