二叉树是一个重要的数据结构, 本文基于"二叉查找树"的python可视化 pybst 包, 做了一些改造, 可以支持更一般的"二叉树"可视化. 关于二叉树和二叉查找树的概念以及常用操作和算法基础, 可以看后面的参考文章.
===================================
二叉查找树可视化包 pybst
===================================
pypi 有一个"二叉查找树"的可视化的package, 是 pybst 包, 该包依赖 matplotlib 和 networkx, 所以推荐在 Anaconda 发行版上安装.
以下代码可以直接在 dreampie shell中执行
# demo1: 简单测试示例
# 导入指定类和函数
from pybst.bstree import BSTree
from pybst.draw import plot_tree
# 创建一个树
tree=BSTree()
tree.insert(10, '')
"""
insert()方法说明: 增加一个节点(key为10, value为a), key 必须是数值, value 看起来没什么用, 直接赋空字符串即可.
因为没有指定 parent 参数, 而且是第一个没有指定 parent 的调用, 所以新节点为根节点.
在根节点生成后, 如调用 insert() 时仍没有指定 parent 的话, bst 包将按照二叉查找树的规则, 自动在合适的节点上增加子节点.
但注意该函数返回值为空, 而不是新生成的节点, 要获得新节点, 需要使用get_node()方法.
"""
# 获取key=10的节点
parent_node=tree.get_node(10)
# 在key=10的节点上增加子节点, 因为bst包是二叉查找树, 所以如果三次指定了同一个parent_node,
# 第3次新增的节点将是parent_node的孙子节点, 而不是直接子节点
tree.insert(11, '', parent_node)
# 二叉查找树可视化, 该树共两个节点: 10 和 11
plot_tree(tree)
# demo2: 一个稍微复杂的示例
# 创建一个树
tree=BSTree()
tree.insert(90, '')
node_90=tree.get_node(90)
tree.insert(50, '', node_90)
tree.insert(150, '', node_90)
node_50=tree.get_node(50)
tree.insert(20, '', node_50)
tree.insert(75, '', node_50)
node_20=tree.get_node(20)
tree.insert(5, '', node_20)
tree.insert(25, '', node_20)
node_75=tree.get_node(75)
tree.insert(66, '', node_75)
tree.insert(88, '', node_75)
tree.insert(98, '', node_75) # 注意98这个节点将自动会接在88节点下, 而不是75节点下.
# 二叉查找树可视化
plot_tree(tree)
===================================
让 pybst 包支持普通二叉树
===================================
因为 bst 包自动会按照"二叉查找树"的规则排列节点, 比如key小的话, 会放在左边, key多的话, 会放在右边, 也会自动选择合适的父节点.
所以不能支持普通的二叉树的可视化, 我对 pybst 包 bstree.py 做了修改, 可以支持普

最低0.47元/天 解锁文章
699

被折叠的 条评论
为什么被折叠?



