我试图从二进制序列二进制创建一个树,如“100101” 然后我想要像这样创建树。 (基本上1表示向右移动,0表示向左移动)
<Root node>
|
1
/
0
/
0
\
1
/
0
\
1
所以我在这里做的是代码: 其中值为字符串序列(ex value =“1001”)
def _inserto(root,value):
for i in value:
if root == None:
root = BSTNode(i)
current = root
elif i == "1":
if current.right is not None:
current.right = BSTNode(i)
current = current.right
else:
current.right = BSTNode(i)
current = current.right
elif i == "0":
if (current.left is not None):
current.left = BSTNode(i)
current = current.left
else:
current.left =BSTNode(i)
current = current.left
return root
现在的问题是,如果我想输入另一个像“01”这样的序列,树应该看起来像这样
<Root Node>
|
1
/
0
/ \
0 1
\
1
/
0
\
1
,但我真的很难过,因为我的功能是要覆盖旧树。
答案 0 :(得分:2)
问题在于处理现有节点的代码。如果存在,代码将使用新的BSTNode覆盖它,从而丢失其下的所有现有节点。你需要的是:
elif i == "1":
if current.right is None:
current.right = BSTNode(i)
current = current.right
elif i == "0":
if root.left is None:
current.left = BSTNode(i)
current = current.left
如果没有已存在的节点,则仅分配节点,然后将当前设置为此新节点。