关于二叉树的问题求解!

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

刚好也在学习二叉树:

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]
'''

中序遍历,先左叉,后右叉。要使用递归,试举例如下:

def findNode(tree):
    if tree.hasLeftNode or tree.hasRightNode:
        print(findNode(tree.hasLeftNode))
        print(tree.value)
        print(findNode(tree.hasRightNode))
    else:
        print(tree.value)