【问题标题】:Tree Structure Not Correctly Printing Out树结构未正确打印出来
【发布时间】:2015-10-27 01:11:31
【问题描述】:

我在使用 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);
}

输出:

我很确定根据我的输入,5 根本不应该缩进,因为它将是根节点。

我认为它应该看起来像(基于二叉搜索树):

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

(当然还有正确数量的前置空格)

谁能解释我做错了什么?

【问题讨论】:

    标签: java tree key binary-search-tree


    【解决方案1】:

    您将空格数计算为3*height(n)height(n) 计算左右树的最大路径长度,所以根总是最右边。

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

    【讨论】:

    • 你能定义maxHeight是什么意思吗?
    • 你需要找到所有节点的最大高度。在上述height(...) 函数的当前实现中,这将是height(rootNode)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    相关资源
    最近更新 更多