基于中序、前序遍历构建二叉树的Python代码,如何新增终端树状可视化输出方法?
可直接适配的二叉树终端树状打印实现
无需修改原有二叉树构建、遍历的核心逻辑,仅需新增独立的打印函数,即可在终端输出带清晰层级连接关系的树状结构,替代原来的扁平遍历输出。
新增打印逻辑
将下列函数添加到原有代码中,与其他功能函数保持同级:
def print_tree(root): def render(node, indent="", is_right=True): if not node: return # 递归渲染右子树,保证视觉上右分支在右侧 render(node.right, indent + (" " if is_right else "│ "), True) # 绘制当前节点的连接符 connector = "└── " if is_right else "┌── " print(f"{indent}{connector}{node.data}") # 递归渲染左子树 render(node.left, indent + (" " if not is_right else "│ "), False) if not root: print("空二叉树") return # 根节点单独打印在最顶部 print(f"{root.data}") # 按右子树、左子树的顺序渲染分支 render(root.right, " ", True) render(root.left, " ", False)
调用方式
在原有主逻辑的最后新增打印调用即可,调整后的主函数部分如下:
if __name__ == '__main__': inorder = [4, 2, 1, 7, 5, 8, 3, 6] preorder = [1, 2, 4, 3, 5, 7, 8, 6] root = constructTree(inorder, preorder) print("The inorder traversal is ", end='') inorderTraversal(root) print() print("The preorder traversal is ", end='') preorderTraversal(root) print("\n二叉树终端结构:") print_tree(root)
输出效果
使用示例序列构建的树,终端实际输出如下:
1 └── 6 ┌── 3 │ └── 8 │ └── 5 │ ┌── 7 └── 2 └── 4
实现特性
- 完全兼容现有
Node类结构,仅依赖data、left、right三个属性,不对原有树构建流程做任何改动 - 无第三方依赖,使用Unicode制表符绘制分支连接,在支持UTF-8编码的终端即可正常显示
- 自动适配不同深度的树结构,空节点不会造成排版错乱,层级缩进和连接关系完全对齐
- 输出视觉方向与常规二叉树绘制逻辑一致:根在顶部,左分支在左下,右分支在右下,节点连接关系清晰可辨
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

