# BinaryTree：学习二叉树的Python库

CharlotteMc 3年前
``   <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>    ``