按照树形结构直观地打印出一棵二叉树(Java)

本文介绍了一种用Java按照树形结构直观打印二叉树的方法。通过先序遍历和二维字符串数组,确定树的形状并进行打印。虽然存在高度过高和大数字可能导致的显示问题,但在日常应用中足够使用。
摘要由CSDN通过智能技术生成

平时无论是工作还是学习中,在写代码时,树总是一个非常常见的数据结构。在我们完成一棵树的构建之后,如果我们想要看这棵树的结构,不像数组或者List等数据结构,我们可以非常方便地用各种方式将其中的所有元素打印出来,对于树而言,这个过程要麻烦得多,我们可以用各种遍历方式得到这棵树的结构,但是终究还是不够直观。

不知大家有没有想过,如果我们可以按照树的结构,将其打印出来就好了,那么本文就是一种实现这个目标的思路以供参考。

引言

树的结构

在本文中所用的树的结构是leetcode上所用的树的结构,其定义如下:

public class TreeNode {
   
    public int val;
    public TreeNode left;
    public TreeNode right;
    public TreeNode(int x) {
    val = x; }
}
如何方便地创建一个树的数据结构?

在下面贴的这篇博客中中有详细的讲解,基于Leetcode中树的编码方式,由一个数组直接得到一棵树。

如何创建一棵树


如何打印一棵树

在这里,我的总体思路是,用一个二维的字符串数组来储存每个位置应该打印什么样的输出。

首先,先确定树的形状。为了美观,我设定在最后一行的每个数字之间的间隔为3个空格,而在之上的每一层的间隔,有兴趣的同学可以自己推算一下,总之,越往上,间隔是越大的,而且是一个简单的线性增加的关系。

为了绘制出这样的形状,首先,我们需要获得树的层数(用一个简单的递归即可得到),根据树的层数,确定我们的二维数组的大小,即高度和宽度。之后,用先序遍历的方式,遍历树的每个节点,并进行相对应的写入操作。

更详细的解释可以看代码中的注释,当然,也可以根据下面TreeOperationTest.java中的demo直接在自己的代码中调用这个方法来检查自己的树。

话不多说,直接贴上所用的代码:

// TreeOperation.java
public class TreeOperation {
   
    /*
    树的结构示例:
              1
            /   \
          2       3
         / \     / \
        4   5   6   7
    */

    // 用于获得树的层数
    public static int getTreeDepth(TreeNode root) {
   
        return root == null ? 0 : (1 + Math.max(getTreeDepth(root.left), getTreeDepth(root.right)));
    }


    private static void writeArray(TreeNode currNode, int rowIndex, int columnIndex, String[][] res, int treeDepth) 
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值