请问各位怎么用python画完美二叉树 perfect binary tree
要能在python中作出这种图。
如何用python画完美二叉树
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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无用
悬赏问题
- ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
- ¥15 有了解d3和topogram.js库的吗?有偿请教
- ¥100 任意维数的K均值聚类
- ¥15 stamps做sbas-insar,时序沉降图怎么画
- ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
- ¥15 关于#Java#的问题,如何解决?
- ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
- ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
- ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
- ¥500 火焰左右视图、视差(基于双目相机)