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日

悬赏问题

  • ¥15 华为ensp使用基本ACL限制公司网络访问
  • ¥15 帮我做下照片上的PLC题
  • ¥15 labview2022 使用modbus报缺少依赖?
  • ¥15 谷歌地图是不是不开通结算功能,api会使用不了哦
  • ¥15 unity腾讯云对象存储机型适配
  • ¥15 求全国交通咨询模拟代码,要求如下,可以完全在dev c++运行
  • ¥15 根据要求修改程序编码
  • ¥15 用 Python 做一个用 Excel 表导入的答题系统
  • ¥15 使用微信开发者工具实现一个“婚博会”小程序
  • ¥15 ros的rviz仿真机器人