BinaryTree:学习二叉树的Python库
CharlotteMc
8年前
<p style="text-align:center"><img src="https://simg.open-open.com/show/89f82f464f3a8d91be08d981094cb1b6.gif"></p> <p>学过二叉树的朋友都有过这样的经历:按照二叉树的数据手动模拟画出来二叉树。但是现在,有了BinaryTree这个库,你可以不必费这个麻烦了!</p> <p>BinaryTree是一个小型的Python库,给你提供了简单的API,可以依照树的形式打印一个二叉树,以及二叉树的信息概览。你可以专注于你的算法了!</p> <h3><strong>安装</strong></h3> <p>通过 Pypi 安装稳定版:</p> <pre> <code class="language-python">~$ pip install binarytree</code></pre> <p>从 Github 安装最新版本:</p> <pre> <code class="language-python">~$ git clone https://github.com/joowani/binarytree.git ~$ python binarytree/setup.py install</code></pre> <p>取决于你环境的不同,可能会需要sudo权限。</p> <h3><strong>入门</strong></h3> <p>默认情况下,二叉树使用下面的class作为节点:</p> <pre> <code class="language-python">class Node(object): def __init__(self, value): self.value = value self.left = None self.right = None</code></pre> <p>使用下面的方式以漂亮的形式打印二叉树:</p> <pre> <code class="language-python">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)</code></pre> <p>也支持 list形式的二叉树 :</p> <pre> <code class="language-python">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)</code></pre> <p>快速检查二叉树的各个属性:</p> <pre> <code class="language-python">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'])</code></pre> <p>导入Node class然后构建你自己的树:</p> <pre> <code class="language-python">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)</code></pre> <p>如果默认的Node不能满足你的需要,你可以自定义Node:</p> <pre> <code class="language-python">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 # Call setup in the beginning to apply your specification 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)</code></pre> <h3> </h3> <p> </p> <p>来自:http://geek.csdn.net/news/detail/106885</p> <p> </p>