2011-05-04 99 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 
}