二叉树的python可视化和常用操作代码

 二叉树是一个重要的数据结构, 本文基于"二叉查找树"的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 做了修改, 可以支持普

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值