请问各位怎么用python画完美二叉树 perfect binary tree
要能在python中作出这种图。
这只能代码写二叉树呀,你要画个图,只能用海龟画笔呀,要实在想结合二叉树数代码和海龟画笔或者matplotlib搞这样的一个,看看这两个博客试试:
https://blog.csdn.net/jluzhanghm1720/article/details/121522902
http://t.csdn.cn/RDgfX
如果你要打印出二叉树,可以实现下图:
# coding=utf-8
class Node(object):
def __init__(self, data):
self.data = data
self.parent = None
self.left_child = None
self.right_child = None
class TreeQueue(object):
def __init__(self):
self.__members = list()
def is_empty(self):
return not len(self.__members)
def enter(self, data):
self.__members.insert(0, data)
def outer(self):
if self.is_empty():
return
return self.__members.pop()
class PerfectBinaryTree(object):
def __init__(self):
self.__root = None
self.prefix_branch = '├'
self.prefix_trunk = '|'
self.prefix_leaf = '└'
self.prefix_empty = ''
self.prefix_left = '─L─'
self.prefix_right = '─R─'
def is_empty(self):
return not self.__root
def append(self, data):
node = Node(data)
if self.is_empty():
self.__root = node
return
queue = TreeQueue()
queue.enter(self.__root)
while not queue.is_empty():
cur = queue.outer()
if cur.left_child is None:
cur.left_child = node
node.parent = cur
return
queue.enter(cur.left_child)
if cur.right_child is None:
cur.right_child = node
node.parent = cur
return
queue.enter(cur.right_child)
def show(self):
if self.is_empty():
print('空二叉树')
return
queue = TreeQueue()
queue.enter(self.__root)
while not queue.is_empty():
cur = queue.outer()
print(cur.data, end=' ')
if cur.left_child is not None:
queue.enter(cur.left_child)
if cur.right_child is not None:
queue.enter(cur.right_child)
print()
def is_exist(self, data):
if self.is_empty():
return False
queue = TreeQueue()
queue.enter(self.__root)
while not queue.is_empty():
cur = queue.outer()
if cur.data == data:
return True
if cur.left_child is not None:
queue.enter(cur.left_child)
if cur.right_child is not None:
queue.enter(cur.right_child)
return False
def show_tree(self):
if self.is_empty():
print('空二叉树')
return
print(self.__root.data)
self.__print_tree(self.__root)
def __print_tree(self, node, prefix=None):
if prefix is None:
prefix = ''
prefix_left_child = ''
else:
prefix = prefix.replace(self.prefix_branch, self.prefix_trunk)
prefix = prefix.replace(self.prefix_leaf, self.prefix_empty)
prefix_left_child = prefix.replace(self.prefix_leaf, self.prefix_empty)
if self.has_child(node):
if node.right_child is not None:
print(prefix + self.prefix_branch + self.prefix_right + str(node.right_child.data))
if self.has_child(node.right_child):
self.__print_tree(node.right_child, prefix + self.prefix_branch + ' ')
else:
print(prefix + self.prefix_branch + self.prefix_right)
if node.left_child is not None:
print(prefix + self.prefix_leaf + self.prefix_left + str(node.left_child.data))
if self.has_child(node.left_child):
prefix_left_child += ' '
self.__print_tree(node.left_child, self.prefix_leaf + prefix_left_child)
else:
print(prefix + self.prefix_leaf + self.prefix_left)
def has_child(self, node):
return node.left_child is not None or node.right_child is not None
if __name__ == '__main__':
tree = PerfectBinaryTree()
print(tree)
print("is_empty: ", tree.is_empty())
tree.show()
for i in range(15):
tree.append(i)
tree.show()
print(tree.is_exist(2))
print(tree.is_exist(200))
tree.show_tree()
百度应该大把。