TreePrint打印树结构工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.tree;
 
 
public class TreePrinter {
 
    <T> int heightOf(BSTree.BSTNode<T> node) {
        if(node == null) {
            return 0;
        }
        return Math.max(
                heightOf(node.left),
                heightOf(node.right)
        ) + 1;
    }
 
 
    public <T> void print(BSTree.BSTNode<T> root) {
        int h = heightOf(root);
        int W = 2*(int)Math.pow(2, h);
        StringBuilder[] lines = new StringBuilder[h*2];
        for(int i = 0; i < h*2; i++) {
            lines[i] = new StringBuilder(String.format("%" + W + "s", ""));
        }
 
        printNode(lines, W, root, 0, 0);
        for(StringBuilder line : lines) {
            System.out.println(line.toString());
        }
 
    }
 
    private <T> void printNode(StringBuilder[] lines, int W, BSTree.BSTNode<T> node, int h, int base) {
        double nums = Math.pow(2, h);
        int pos = base + (int)(W / (nums *  2));
 
        String str = node.data.toString();
        for(int i = 0; i < str.length(); i++) {
            lines[h*2].setCharAt(pos + i, str.charAt(i));
        }
 
        if(node.left != null) {
            lines[h*2+1].setCharAt(pos-1, '/');
            printNode(lines, W, node.left, h+1, base);
        }
 
        if(node.right != null) {
            lines[h*2 + 1].setCharAt(pos + str.length() + 1, '\\');
            printNode(lines, W, node.right, h+1, pos);
        }
 
 
    }
 
}

  

posted @   scwyfy  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示