在Python中使用GraphViz繪製二叉排序樹

2021-10-11 09:13:03 字數 3636 閱讀 2558

在python中使用graphviz繪製二叉排序樹

2.進入cmd,輸入 pip install graphviz

實現**

# python 實現二叉樹

# author e

import queue

from graphviz import digraph

class

node

(object):

def__init__

(self, data =

none

, parent =

none):

self.data = data

self.parent = parent

self.right =

none

self.left =

none

class

binarytree

(object):

def__init__

(self,

list):

self.root = node(

)for ele in

list

: self.insert(ele, self.root)

definsert

(self, x, r)

:if r.data ==

none

: self.root.data = x

if x < r.data:

if r.left ==

none

: r.left = node(x, r)

else

: self.insert(x, r.left)

if x > r.data:

if r.right ==

none

: r.right = node(x, r)

else

: self.insert(x, r.right)

deflayerorder

(self)

:# 初始化佇列

q = queue.queue(

) q.put(self.root)

while

(q.empty()!=

true):

node = q.get(

)print

(node.data)

if node.left !=

none

: q.put(node.left)

if node.right !=

none

: q.put(node.right)

defdrawpic

(self)

: dot = digraph(comment=

'the test table'

) q = queue.queue(

) q.put(self.root)

while

(q.empty()!=

true):

node = q.get(

) dot.node(name =

str(node.data)

, lable =

str(node.data)

)if node.left !=

none

: dot.node(name =

str(node.left.data)

, lable =

str(node.left.data)

) dot.edge(

str(node.data)

,str

(node.left.data)

) q.put(node.left)

else

:#生成空節點invisl,讓生成的二叉樹可以分清左右子樹

dot.node(name =

str(node.data)

+'invisl'

, lable =

str(node.data)

+'invisl'

, style =

'invis'

) dot.edge(

str(node.data)

,str

(node.data)

+'invisl'

, style =

'invis'

)#生成空節點invism,讓生成的二叉樹可以分清左右子樹

dot.node(name =

str(node.data)

+'invism'

, lable =

str(node.data)

+'invism'

, style =

'invis'

) dot.edge(

str(node.data)

,str

(node.data)

+'invism'

, style =

'invis'

)if node.right !=

none

: dot.node(name =

str(node.right.data)

, lable =

str(node.right.data)

) dot.edge(

str(node.data)

,str

(node.right.data)

) q.put(node.right)

else

:#生成空節點invisr,讓生成的二叉樹可以分清左右子樹

主要思路是用遞迴生成二叉排序樹,再通過層序遍歷繪製圖形。將需要生成樹的列表傳入binarytree的建構函式,再呼叫drawpic方法輸出。平常c++用的多,python寫的比較爛,大家見諒。

如何在Flutter專案中使用GraphQL

麼是graphql 這篇文章主要是看一下如何在flutter專案中使用graphql,如果不清楚graphql是什麼,建議先看下官網對其介紹 從圖中也能看出,分3部分 可以看出,在這個graphql server中,我們可以查詢 continents continent countries coun...

在python中使用websocket

介紹一款很帥的外掛程式autobahnpython,通過它可以在python中很方便的使用websocket進行通訊 基於twisted框架 這個外掛程式真正強大的地方是它提供了乙個 發布 訂閱模式,具體內容有空再寫,先簡單介紹一下如何建立傳統的連線。建立伺服器 必須的模組 from twisted...

在Python中使用 slots

這篇文章主要介紹了在python中使用 slots 方法的詳細教程,slots 方法是python的乙個重要內建類方法,基於python2.x版本,需要的朋友可以參考下 正常情況下,當我們定義了乙個class,建立了乙個class的例項後,我們可以給該例項繫結任何屬性和方法,這就是動態語言的靈活性。...