如何较为直观地打印二叉树

如何较为直观地打印二叉树

题目

给定一棵二叉树,实现一个较为直观地打印方法

BST(用于测试)

class TreeNode():
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None
        self.parent = None


class BST():
    def __init__(self, root=None):
        self.root = root

    def insert_recursive(self, val):
        def recursive(node, val):
            if not node:
                return TreeNode(val)

            if val < node.val:
                node.left = recursive(node.left, val)
                node.left.parent = node
            elif val > node.val:
                node.right = recursive(node.right, val)
                node.right.parent = node

            return node

        self.root = recursive(self.root, val)

书中的方法

    def print_tree(self):
        def print_inorder(node, height, to, length):
            if not node:
                return

            print_inorder(node.right, height+1, 'v', length)
            val = to + str(node.val) + to
            len_m = len(val)
            len_l = (length - len_m) // 2
            len_r = length - len_m - len_l
            val = ' ' * (len_l) + val + ' ' * (len_r)
            print(' ' * (height*length) + val)
            print_inorder(node.left, height+1, '^', length)

        print('Binary Tree:')
        print_inorder(self.root, 0, 'H', 17)
        print()

另一种方法

并不能类似绘图显示,但感觉比较能体现二叉树结构

    def print_tree2(self):
        def preorder(node):
            if not node:
                print('None', end='')
                return

            print(node.val, end='')
            if node.left or node.right:
                print('(', end='')
                preorder(node.left)
                print(', ', end='')
                preorder(node.right)
                print(')', end='')

        preorder(self.root)
        print()

测试

def test(count):
    vals = [i for i in range(count)]
    random.shuffle(vals)

    bst = BST()
    for v in vals:
        bst.insert_recursive(v)

    bst.print_tree()
    bst.print_tree2()


if __name__ == '__main__':
    test(10)

结果

➜  2_print_tree git:(master) ✗ python bst.py 
Binary Tree:
                                         v9v       
                                                          ^8^       
                        v7v       
       H6H       
                        ^5^       
                                                          v4v       
                                                                           ^3^       
                                                                                            ^2^       
                                                                                                             ^1^       
                                         ^0^       

6(5(0(None, 4(3(2(1, None), None), None)), None), 7(None, 9(8, None)))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值