python列表表示二叉树_python-产生二叉树的所有从根到叶的分支
抱歉,这是一个常见问题,但是我没有针对我的特定问题找到合适的答案.我正在尝试实现一种walk方法,该方法将二叉树从其根节点移动到其每个叶节点,并在到达叶节点时产生从根到叶的路径.例如,遍历由以下表示的二叉树:
__a__
/ \
b d
/ \ / \
- c - -
将产生:
['a','b','c']
['a','d']
我的想法是BinaryTree.walk在根节点上调用Node.traverse,而后者又递归地调用每个子节点的traverse方法. BinaryTree.walk还创建一个空列表,该列表随每个遍历调用一起传递,附加每个节点的数据,一旦到达叶节点就产生该列表,并在访问每个节点后将每个元素从列表中弹出.
在某些时候,尽管出了点问题.这是我的代码:
class Node:
def __init__(self,data=None,left=None,right=None):
self.data = data
self.left = left
self.right = right
def __repr__(self):
return f"{self.__class__.__name__}({self.data})"
@property
def children(self):
return self.left,self.right
def traverse(self,branch):
print('ON NODE:',self)
branch.append(self.data)
if self.left is None and self.right is None:
yield branch
else:
for child in self.children:
if child is not None:
print('ENTERING CHILD:',child)
child.traverse(branch=branch)
print('EXITING CHILD:',child)
branch.pop()
class BinaryTree:
def __init__(self,root=Node()):
if not isinstance(root,Node):
raise ValueError(f"Tree root must be Node,not {type(root)}")
self.root = root
def __repr__(self):
return f"{self.__class__.__name__}({self.root})"
def walk(self):
node = self.root
branch = []
yield from node.traverse(branch=branch)
if __name__ == '__main__':
# create root node
n0 = Node('A')
# create binary tree with root node
tree = BinaryTree(root=n0)
# create others nodes
n1 = Node(data='B')
n2 = Node(data='C')
n3 = Node(data='D')
# connect nodes
n0.left = n1
n0.right = n3
n1.right = n2
# walk tree and yield branches
for branch in tree.walk():
print(branch)
预期产量:
ON NODE: Node(A)
ENTERING CHILD: Node(B)
ON NODE: Node(B)
ENTERING CHILD: Node(C)
ON NODE: Node(C)
['A','B','C'] # yielded branch
EXITING CHILD: Node(C)
EXITING CHILD: Node(B)
ENTERING CHILD: Node(D)
ON NODE: Node(D)
['A','D'] # yielded branch
EXITING CHILD: Node(D)
实际输出:
ON NODE: Node(A)
ENTERING CHILD: Node(B)
EXITING CHILD: Node(B)
ENTERING CHILD: Node(D)
EXITING CHILD: Node(D)
IndexError: pop from empty list
我知道我对列表做错了,因为它在空时尝试弹出,但是我不明白它是怎么做到的.它应该为每个追加调用调用一次pop.
我也无法弄清楚为什么要输入和退出节点,但是没有显示ON NODE:消息…就像我的代码以某种方式跳过child.traverse(branch = branch)行一样?
谁能帮助我了解我在哪里搞砸了?
在此先感谢您的帮助!
python列表表示二叉树_python-产生二叉树的所有从根到叶的分支相关推荐
- python列表字典操作_Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结...
创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_star ...
- python列表生成字典_Python 列表生成式 字典生成式
Python 列表生成式 & 字典生成式 通过生成式可以更加简洁地生成列表和字典 列表生成式 对比 直接生成数据后加入列表示例: user_list = list() for i in ran ...
- python列表浅复制_Python列表的深复制和浅复制示例详解
一.深复制与浅复制 列表是Python中自带的一种数据结构,在使用列表时,拷贝操作不可避免,下面简单讨论一下列表的深复制(拷贝)与浅复制 首先看代码: l1 = [5, 4, 3, 2, 1] # 用 ...
- python列表切片图解_Python列表切片操作实例总结
本文实例讲述了Python列表切片操作.分享给大家供大家参考,具体如下: 切片指的是列表的一部分. 1 基本用法 指定第一个元素和最后一个元素的索引,即可创建切片 .Python 会在到达指定的第二个 ...
- python列表存储乱码_python 列表中文乱码
今天在学习python列表的时候遇到中文乱码问题,如下: # -*- coding: UTF-8 -*- print "列表" list1 = ['张三',"李四&quo ...
- python 列表自动排序_Python学习小技巧之列表项排序的示例代码分享
这篇文章主要给大家介绍了Python学习小技巧之列表项排序的相关资料,文中介绍的非常详细,需要的朋友们可以参借鉴,下面跟着小编一起来学习学习吧. 本文介绍的是关于Python列表项排序的相关内容,分享 ...
- python列表生成器语法_Python 列表生成式\生成器
Python 列表生成式+生成器 一.列表生成式 1.什么是列表生成器 一种可以便捷地生成列表的表达式,有时候可以替换list.append(变量) 2.需求. 如何将列表中的每个数据都加1 列表:d ...
- python列表比较方法_python列表常用方法
list是一个类,用中括号括上,逗号分隔,元素可以是数字,字符,字符串,也可以是嵌套列表,布尔类型. 1.通过索引取值 li=[1,12,9,'age',['wangtianning',[19,'10 ...
- python列表增加一行_Python 列表中的修改、添加和删除元素的实现
本文介绍的是列表中的修改.添加和删除元素.第一次写博客,如果本文有什么错误,还请大家评论指正.谢谢! 创建的列表大多数都将是动态的,这就意味着列表创建后,将随着程序的运行删减元素. 修改列表元素 修改 ...
最新文章
- Netdata---Linux系统性能实时监控平台部署记录
- sl中几个简单变量的获取
- __name__ ==“ __main__”怎么办?
- Python 是一门怎样的语言
- hosts文件_电脑修改hosts文件屏蔽网站方法
- 马斯克认为 AI 必超越并威胁人类,他宁愿搞脑机接口也不碰AI
- 一个IT经理眼中的RTX、Simba2013与Lync
- excel 字符串拼接_Excel教程:应收账款自动弹窗提醒
- ModelArts的雪中送炭,让我拿下CCF BDCI华为Severless工作负载预测亚军
- 计算机主板的1117标识,AMS1117封装尺寸图_AMS1117引脚图及功能 - 全文
- mac环境下安装mysql
- Adblock PLus 插件chrome用
- macpro的IDEA常用快捷键~持续更新
- . NET多线程编程
- excel oss 上传_阿里云对象存储OSS全系统教程
- 关于OGG trail file 到999999之后的处理方法
- APE转MP3的转换码率说明
- 个人独资公司税收标准
- Typora 主题 艾米莉亚
- Manjaro21-kde版安装全记录
热门文章
- ICCV 2021 | 简而优:用分类器变换器进行小样本语义分割
- 20分钟+1080显卡,能跑多复杂的模型?
- 关于Vision Transformer的一些思考
- 日读论文100+,AI都替代不了!辞去医药研发总监后,她成为了一名全职学术警察...
- 32岁程序员,失业4个月45次面试经历,与君共勉
- Tornado自定义分布式session框架
- Django博客系统(写博客页面展示分类)
- 文档相似度之词条相似度word2vec、及基于词袋模型计算sklearn实现和gensim
- 2019年计算机考研408真题
- JSP第二次作业_1小题