【问题标题】:Printing Level Order Binary Search Tree Formatting打印级别顺序二叉搜索树格式
【发布时间】:2012-10-22 14:56:47
【问题描述】:

我已经实现了以下代码以按级别顺序打印二叉搜索树。

public void printLevelOrder(int depth) {
    for (int i = 1; i <= depth; i++) {
        printLevel(root, i);
    }
}

public void printLevel(BinaryNode<AnyType> t, int level) {
    if (t == null) {
        return;
    }
    if (level == 1) {
        System.out.print(t.element);
    } else if (level > 1) {
        printLevel(t.left, level - 1);
        printLevel(t.right, level - 1);
    }
}

我正在尝试弄清楚如何改进我的代码以使其以某种格式打印出来。

举个例子,给定一棵树

    1 
   / \
  2   3
 /   / \
4   5   6

目前打印如下:

123456

我正在寻找它打印如下:

Level 0: 1
Level 1: 2 3
Level 2: 4 5 6

【问题讨论】:

  • 让函数printLevel将节点号作为字符串返回,而不是立即打印出来。然后,您可以以任何您想要的格式连接这些字符串。

标签: java binary-search-tree


【解决方案1】:

不要在递归函数调用中立即打印值,而是使用字符串来保存值。这将使操作输出变得更容易。

public void printLevelOrder(int depth) {
    for (int i = 1; i <= depth; i++) {
        System.out.print("Level " + (i-1) + ": ");
        String levelNodes = printLevel(root, i);
        System.out.print(levelNodes + "\n");
    }
}

public String printLevel(BinaryNode<AnyType> t, int level) {
    if (t == null) {
        return "";
    }
    if (level == 1) {
        return t.element + " ";
    } else if (level > 1) {
        String leftStr = printLevel(t.left, level - 1);
        String rightStr = printLevel(t.right, level - 1);
        return leftStr + rightStr;
    }
    else // you need this to get it to compile
      return "";
}

输出:

Level 0: 1 
Level 1: 2 3 
Level 2: 4 5 6 

【讨论】:

  • 谢谢。这帮助很大!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
  • 1970-01-01
  • 2011-01-15
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多