请问各位怎么用python画完美二叉树 perfect binary tree
要能在python中作出这种图。
4条回答 默认 最新
关注
这只能代码写二叉树呀,你要画个图,只能用海龟画笔呀,要实在想结合二叉树数代码和海龟画笔或者matplotlib搞这样的一个,看看这两个博客试试:
https://blog.csdn.net/jluzhanghm1720/article/details/121522902http://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()
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用