python - 在二叉树中寻找较低的祖先
问题描述
我想在二叉树中找到较低的祖先,我要做的是首先列出每个节点的父亲,然后比较列表,最后一个共同点是较低的祖先。
我有这个代码:
def ancesters(self, node, list= []):
if self.seekNode(node) != False:
if node < self.id:
list.append(self.id)
return self.left.ancesters(node)
elif node > self.id:
list.append(self.id)
return self.right.ancesters(node)
elif self.id == node:
list.append(self.id)
return list
else:
return False
函数 seekNode 工作,这个方法也可以,但是当我使用该方法两次时,显示最后一次调用的祖先列表,例如:
我有这棵树:
2
|
---
5
---
3 6
当我调用方法 ancesters(6) 时,列表将是 (2,5,6),当我再次调用搜索 3 的父亲时,显示 (2,5,6,2,5,3)。
那么,当我设置参数(list=[])时,为什么列表没有初始化并保存列表值?我用相同的对象调用该方法,在这种情况下将是树的节点(根)。节点是树的节点(根)的实例。
解决方案
简而言之,不要使用可变对象(如列表)作为默认值。这是Anti-Pattern,因为在 Python 中,默认值在所有函数调用之间共享。所以它必须是不可变的。流行的选项是无和条件if not None: ...
你也可以在这里阅读
推荐阅读
- python - 如何设置互联网网络来控制机器人?
- swift - 由于手表套件,应用程序不会为设备编译 - ValidateEmbeddedBinary 失败
- palantir-foundry - 在 Foundry Transforms 中保存 CSV 文件
- python - python - assert_called_with 其中 AttributeError 作为 arg 传递
- c# - 使用 C# 检查 List 中是否存在值
- r - 在R中将两个数据框制作成相同的形式
- python - 覆盖继承的属性设置器(不带 fset)
- ios - 运行时的 swift_unexpectedError 到底是什么?
- palantir-foundry - Foundry 数据连接是否支持 SFTP 源?
- python - 如何在Python的嵌套字典中获取具有相同键的所有值?