如何用python画完美二叉树

请问各位怎么用python画完美二叉树 perfect binary tree
要能在python中作出这种图。

img

这只能代码写二叉树呀,你要画个图,只能用海龟画笔呀,要实在想结合二叉树数代码和海龟画笔或者matplotlib搞这样的一个,看看这两个博客试试:
https://blog.csdn.net/jluzhanghm1720/article/details/121522902

http://t.csdn.cn/RDgfX
如果你要打印出二叉树,可以实现下图:

img


这样的可以

# 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()

百度应该大把。

用Python实现二叉树、二叉树非递归遍历及绘制:https://blog.csdn.net/huang_shiyang/article/details/79981332?spm=1001.2101.3001.6650.15&utm_medium=distribute.wap_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-15-79981332-blog-104286502.wap_blog_relevant_default&depth_1-utm_source=distribute.wap_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-15-79981332-blog-104286502.wap_blog_relevant_default