Python 中有个很酷的第三方包叫做anytree
,全名 Any Python Tree Data,i.e. 期望用来表示任何树的数据结构。
而其中的可视化功能,每次都令人印象深刻。这篇文章简单分享,个人解决问题的思考路径 & 简易实现~
>> ...
>> r = RenderTree(root)
>> print(r)
Node('/A')
├── Node('/A/B')
│ ├── Node('/A/B/D')
│ │ └── Node('/A/B/D/F')
│ │ └── Node('/A/B/D/F/G')
│ └── Node('/A/B/E')
└── Node('/A/C')
1 问题拆解
一开始看到这个问题,可能有些没有头绪,但有没有可能对该问题进行分解
.
.
.
.
.
.
.
.
.
一棵树的可视化,分解为:
每一行的显示,由三个部分组成
填充(│
)
前缀(├──
or└──
)
节点自身
从上至下打印的顺序(深度优先遍历)
2 实现
2.1 定义「行」的数据结构
行(Row)与节点一一对应,其中包含两个元素: