所以我必须将一个节点插入二叉搜索树.在我的入门课程中,二叉搜索树表示为链接列表,例如,
[4,[5,[0,[],[]],[2,[],[]]],[1,[],[]]]对于下图中的二叉树:
.
(这不是二叉搜索树,只是我有一张图片的二叉树).
因此,要将一个节点插入树中,我编写了以下递归代码:
def tree_node(key):
return [key, [],[]]
def insert(bst,key):
if bst == []:
return tree_node(key)
if key < bst[0]:
return insert(bst[1],key)
else:
return insert(bst[2],key)
return bst
这只返回节点,而不是返回节点的新树
例如:
>>> insert([2, [1, [], []], [3, [], []]], 6)
[6, [], []]
应该是什么时候:
>>> insert([2, [1, [], []], [3, [], []]], 6)
[2, [1, [], []], [3, [], [6, [], []]]]
谢谢!
最佳答案 您需要更改基本案例.您需要修改传入的空列表,而不是返回新列表.切片分配可能最简单:
def insert(bst,key):
if bst == []:
bst[:] = tree_node(key)
elif key < bst[0]:
insert(bst[1],key)
else:
insert(bst[2],key)
由于此函数修改了树,我不会返回它.如果你想要那样,只需在最后重新添加返回bst(但不是在递归步骤中,我们要忽略那些返回值).