二叉树打印首行意外缩进问题排查及修正需求
解决二叉树打印首行缩进问题
你当前的代码中,虽意图让根节点无缩进输出,但实际运行时首行仍出现缩进。以下是两种直接有效的修复方案:
方案1:拆分打印逻辑(区分无缩进/树形缩进)
新增一个无缩进打印的辅助方法,满足首次全无缩进、完成版树形缩进的需求:
public void printTree() { UI.clearText(); // 首次打印:所有节点无缩进 printTreeNoIndent(theTree); UI.println(); UI.println("Completion version:"); // 完成版:树形层级缩进 printTreeHelper(theTree, ""); } // 无递归缩进打印所有节点 private void printTreeNoIndent(DTNode node) { if (node != null) { UI.println(node.getText()); printTreeNoIndent(node.getYes()); printTreeNoIndent(node.getNo()); } } // 树形缩进打印方法 private void printTreeHelper(DTNode node, String indentation) { if (node != null) { if (indentation.isEmpty()) { // 根节点直接输出,无前缀 UI.println(node.getText()); } else { // 子节点添加缩进和分隔空格 UI.println(indentation + " " + node.getText()); } // 子节点缩进层级增加两个空格 printTreeHelper(node.getYes(), indentation + " "); printTreeHelper(node.getNo(), indentation + " "); } }
方案2:优化原有辅助方法的条件判断
如果不想新增方法,直接修改原有printTreeHelper的文本拼接逻辑,确保根节点无任何前缀:
public void printTree() { UI.clearText(); printTreeHelper(theTree, ""); UI.println(); UI.println("Completion version:"); printTreeHelper(theTree, ""); } private void printTreeHelper(DTNode node, String indentation) { if (node != null) { String nodeText = indentation.isEmpty() ? node.getText() : indentation + " " + node.getText(); UI.println(nodeText); printTreeHelper(node.getYes(), indentation + " "); printTreeHelper(node.getNo(), indentation + " "); } }
两种方案都能实现:首次打印首行无缩进,完成版按树形层级展示缩进效果。
内容的提问来源于stack exchange,提问作者Zynbad
相关产品推荐
相关产品推荐

