用python画出二叉树_用Python绘制二叉树(Matplotlib+Networkx),使用,python,matplotlibnetworkx...

本文介绍如何使用Python结合networkx和matplotlib库绘制二叉树。通过定义Node类,创建二叉树,并定义draw方法以图形方式展示二叉树结构。示例代码创建了一棵以特定数据为基础的二叉树并进行绘制。
摘要由CSDN通过智能技术生成

import networkx as nx

import matplotlib.pyplot as plt

from collections import defaultdict

class Node:

def __init__(self, val):

self.name = val

self.left = None

self.right = None

def create(data, idx=0):

if idx >= len(data):

return None

cur = Node(data[idx])

cur.left = create(data, idx * 2+1)

cur.right = create(data, idx * 2 + 2)

return cur

def draw(node): # 以某个节点为根画图

saw = defaultdict(int)

def create_graph(G, node, p_name, pos={}, x=0, y=0, layer=1):

if not node:

return

name = str(node.name)

saw[name] += 1

if name in saw.keys():

name += ' ' * saw[name]

G.add_edge(p_name, name)

pos[name] = (x, y)

l_x, l_y = x - 2 / 3 ** layer, y - 1

l_layer = layer + 1

create_graph(G, node.left, name, x=l_x, y=l_y, pos=pos, layer=l_layer)

r_x, r_y = x + 2 / 3 ** layer, y - 1

r_layer = layer + 1

create_graph(G, node.right,name, x=r_x, y=r_y, pos=pos, layer=r_layer)

return (G, pos)

graph = nx.DiGraph()

graph, pos = create_graph(graph, node, " ")

pos[" "] = (0, 0)

fig, ax = plt.subplots(figsize=(8, 10)) # 比例可以根据树的深度适当调节

nx.draw_networkx(graph, pos, ax=ax, node_size=1000)

plt.show()

if __name__ == "__main__":

bi_tree = ['hello', 'world', 'I', 'exist', 'because', 'I', 'think']

root = create(bi_tree)

draw(root)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值