BinaryTree 學習二叉樹的Python庫

2021-08-19 12:46:56 字數 3373 閱讀 6758

原文:python library for learning binary trees

作者:joohwan翻譯:賴信濤責編:仲培藝

學過二叉樹的朋友都有過這樣的經歷:按照二叉樹的資料手動模擬畫出來二叉樹。但是現在,有了binarytree這個庫,你可以不必費這個麻煩了!

binarytree是乙個小型的python庫,給你提供了簡單的api,可以依照樹的形式列印乙個二叉樹,以及二叉樹的資訊概覽。你可以專注於你的演算法了!

通過pypi安裝穩定版:

~$ pip install binarytree
從github安裝最新版本:

~$ git clone 

~$ python binarytree/setup.py install

取決於你環境的不同,可能會需要sudo許可權。

預設情況下,二叉樹使用下面的class作為節點:

class node(object):

def __init__(self, value):

self.value = value

self.left = none

self.right = none

使用下面的方式以漂亮的形式列印二叉樹:

from binarytree import tree, bst, heap, pprint

# generate a random binary tree and return its root

my_tree = tree(height=5, balanced=false)

# generate a random bst and return its root

my_bst = bst(height=5)

# generate a random max heap and return its root

my_heap = heap(height=3, max=true)

# pretty print the trees in stdout

pprint(my_tree)

pprint(my_bst)

pprint(my_heap)

也支援list形式的二叉樹:

from heapq import heapify

from binarytree import tree, convert, pprint

my_list = [7, 3, 2, 6, 9, 4, 1, 5, 8]

# convert the list into a tree and return its root

my_tree = convert(my_list)

# convert the list into a heap and return its root

heapify(my_list)

my_tree = convert(my_list)

# convert the tree back to a list

my_list = convert(my_tree)

# pretty-printing also works on lists

pprint(my_list)

快速檢查二叉樹的各個屬性:

from binarytree import tree, inspect

my_tree = tree(height=10)

result = inspect(my_tree)

print(result['height'])

print(result['node_count'])

print(result['leaf_count'])

print(result['min_value'])

print(result['max_value'])

print(result['min_leaf_depth'])

print(result['max_leaf_depth'])

print(result['is_bst'])

print(result['is_max_heap'])

print(result['is_min_heap'])

print(result['is_height_balanced'])

print(result['is_weight_balanced'])

匯入node class然後構建你自己的樹:

from binarytree import node, pprint

root = node(1)

root.left = node(2)

root.right = node(3)

root.left.left = node(4)

root.left.right = node(5)

pprint(root)

如果預設的node不能滿足你的需要,你可以自定義node:

from binarytree import node, setup, tree, pprint

# define your own null/sentinel value

my_null = -1

# define your own node class

class mynode(object):

def __init__(self, data, left, right):

self.data = data

self.l_child = left

self.r_child = right

setup(

node_init_func=lambda v: mynode(v, my_null, my_null),

node_class=mynode,

null_value=my_null,

value_attr='data',

left_attr='l_child',

right_attr='r_child'

)my_custom_tree = tree()

pprint(my_custom_tree)

andydoan說:也可以關注一下這些圖表列印的庫:

二叉樹類BinaryTree

二叉樹是結點的有限集合,該集合或者為空集,或者是由乙個根和兩棵互不相交的稱為該根的左子樹和右子樹的二叉樹組成.二叉樹可以為空集,可以有空二叉樹,也可以有空的左子樹 或 和 又子樹.二叉樹的性質 1.第i層至多有2 i 1 個結點.2.高度為h的二叉樹上至多有2 h 1個結點.3.包含n個元素的二叉樹...

BinaryTree 二叉樹類的實現

二叉樹結點的抽象資料型別 1 template 2class binarytreenode 3 二叉樹結點函式功能實現 1 template 2 binarytreenode binarytreenode 36 template 7 binarytreenode binarytreenode con...

Go語言實現二叉樹(BinaryTree)

二叉樹的操作原理 取第乙個節點為根節點,比根節點小的數放在根節點的左子樹 左節點 比根節點大的數放在根節點的右子數 右節點 取得的時候按照中序遍歷的方式 左 中 右 實現 如下 節點結構體 type node struct 二叉樹結構體 type binarytree struct 查詢時記錄下標 ...