BAIBAIBAI1234567 2022-05-29 20:49 采纳率: 50%
浏览 140
已结题

关于二叉树的问题求解!

假设二叉树中每个结点值为单个字符,采用二叉链存储结构存储( BTree 类),设计一个算法,按从左到右的次序输出一棵二叉树bt中的所有叶子结点

  • 写回答

2条回答 默认 最新

  • Hann Yang 全栈领域优质创作者 2022-05-29 22:29
    关注

    刚好也在学习二叉树:

    class BTree:
     
        def __init__(self, data=None, lchild=None, rchild=None):
            self.data = data
            self.left = lchild
            self.right = rchild
     
        def __repr__(self):
            if not (self.left or self.right): return f'{self.data}'
            return f'[{self.left if self.left else "-"}<{self.data}>{self.right if self.right else "-"}]'
     
        def preOrder(self):
            '''前序遍历'''
            if not self: return []
            return [self.data]+BTree.preOrder(self.left)+BTree.preOrder(self.right)
     
        def inOrder(self):
            '''中序遍历'''
            if not self: return []
            return BTree.inOrder(self.left)+[self.data]+BTree.inOrder(self.right)
     
        def postOrder(self):
            '''后序遍历'''
            if not self: return []
            return BTree.postOrder(self.left)+BTree.postOrder(self.right)+[self.data]
    
        def Leaves(self):
            '''遍历出所有叶子'''
            if not self:
                return []
            elif not self.left and not self.right:
                return [self.data]
            return BTree.Leaves(self.left)+BTree.Leaves(self.right)
    
     
        def levelOrder(self):
            '''层序遍历'''
            que = __import__('queue').Queue()
            que.put(self)
            res = []
            while not que.empty() :
                n = que.get()
                res.append(n.data)
                if n.left is not None :
                    que.put(n.left)
                if n.right is not None :
                    que.put(n.right)
            return res
     
        def Height(self):
            if not self: return 0
            lH = BTree.Height(self.left)
            rH = BTree.Height(self.right)
            return max(lH,rH)+1
    
    
    exp = BTree('+')
    exp.left  = BTree('*')
    exp.right = BTree('/')
     
    exp.left.left   = BTree(1)
    exp.left.right  = BTree(2)
    exp.right.left  = BTree(3)
    exp.right.right = BTree('-')
    
    exp.right.right.left  = BTree(5)
    exp.right.right.right = BTree(6)
    
    print(exp)
    print(exp.Leaves())
    
    '''输出:
    [[1<*>2]<+>[3</>[5<->6]]]
    [1, 2, 3, 5, 6]
    '''
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月29日
  • 已采纳回答 5月29日
  • 创建了问题 5月29日

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站