2015-10-27 60 views
2

我在使用Java创建的基本二叉查找树时遇到了问题。我试图在控制台中输出树结构,并在节点值之前使用预先占用的空格来表示节点的深度。树结构不正确打印

由于某种原因,我的printTree()函数正在输出一个似乎稍微向后的树结构。我不认为(5 0.0)会缩进,因为它会留在像这样的基本树中的根。

下面是我的功能和输出:

c创建了根,s增加了一个键和值,和xp输出树。

private int k; 
private float d; 
private Node left, right; 

public Node(int k) { 
    this.k = k; 
} 

public Node(int k, float d) { 
    this.k = k; 
    this.d = d; 
} 

private int height(Node n) { 
    if (n == null) 
     return -1; 
    return 1 + Math.max(height(n.left), height(n.right)); 
} 

private void printTree(Node n) { 
    if (n == null) 
     return; 
    System.out.println(new String(new char[3 * height(n)]).replace("\0", " ") + "(" + n.k + " " + n.d + ") "); 
    printTree(n.left); 
    printTree(n.right); 
} 

输出:

enter image description here

我敢肯定,基于我的输入有5不应该在所有的,因为这将是根节点缩进。

我认为它应该是这个样子(基于二进制搜索树):

(5 0.0) 
    (4 1.2) 
     (2 3.5) 
    (6 7.5) 
     (87 96.5) 

(当然是有前缀空间的正确量)

任何人都可以解释我是什么做错了?

回答

1

您计算空间的数量为3*height(n)height(n)计算左侧和右侧树的最大路径长度,所以根始终是最靠右的。

或者将节点的高度计算为从节点到根的路径的长度,或者预先计算最大高度并将节点的空白数设置为maxHeight - height(n)

+0

你可以用'maxHeight'来定义你的意思吗? – Nic

+0

您需要找到所有节点的最大高度。在上面的'height(...)'函数的当前实现中,这将是'height(rootNode)'。 – realitybreeder