Python动态设置二叉树左分支多节点问题求助
解决方案
你的问题在于每次调用add_node时直接覆盖了self.root.left,导致永远只能保留一个左子节点。要实现动态在左分支末尾添加节点,只需要沿着左链遍历到最后一个节点,再把新节点挂到它的left属性上即可,不需要用__setattr__这种复杂方法。
修改后的add_node方法如下:
class IspNetwork : def __init__(self) -> None: self.root : Node = Node("isp") def add_node(self, obj) : node = ObjectEncoder().encode(obj) new_node = Node(node) current = self.root # 遍历到左分支的最后一个节点 while current.left is not None: current = current.left # 将新节点挂到最后一个节点的left上 current.left = new_node
原理说明
- 每次添加节点时,从根节点
self.root开始,不断沿着left属性往下走,直到找到一个left为None的节点(也就是当前左链的末尾)。 - 把新创建的节点赋值给这个末尾节点的
left,这样就形成了root.left.left...left的链式结构。
补充说明
假设你的Node类定义大致如下(如果还没定义的话):
class Node: def __init__(self, value): self.value = value self.left = None # 初始化时左子节点默认为None
这样每次调用isp_network.add_node(obj),都会在左分支的最后新增一个节点,完全符合你想要的效果。
内容的提问来源于stack exchange,提问作者kiraoverflow
相关产品推荐
相关产品推荐

