假设二叉树中每个结点值为单个字符,采用二叉链存储结构存储( BTree 类),设计一个算法,按从左到右的次序输出一棵二叉树bt中的所有叶子结点
2条回答 默认 最新
关注 刚好也在学习二叉树:
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] '''
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥35 平滑拟合曲线该如何生成
- ¥100 c语言,请帮蒟蒻写一个题的范例作参考
- ¥15 名为“Product”的列已属于此 DataTable
- ¥15 安卓adb backup备份应用数据失败
- ¥15 eclipse运行项目时遇到的问题
- ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
- ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
- ¥15 自己瞎改改,结果现在又运行不了了
- ¥15 链式存储应该如何解决
- ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站