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

关于二叉树的问题求解!

假设二叉树中每个结点值为单个字符,采用二叉链存储结构存储( 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 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同