假设二叉树中每个结点值为单个字符,采用二叉链存储结构存储( 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] '''
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥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文本,但是每一行里面数据之间空格数量不同