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 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。