【发布时间】:2021-12-11 23:33:20
【问题描述】:
我想知道为什么作者不会简单地编写以下代码而不是原始代码。我做了很多测试,以免错过任何一个案例。因此,它按预期工作。是关于时间复杂度的吗?我错过了哪些要点或细微差别?
将元素视为 [key,value,left-node,right-node]
// my simplification
def insert_binary_tree(x, T):
if T == []:
T.extend([x[0], x[1], [], []])
else:
if x[0] < T[0]:
insert_binary_tree(x, T[2])
else:
insert_binary_tree(x, T[3])
原始代码
def insert_binary_tree(x, T):
if T == []:
T.extend([x[0], x[1], [], []])
else:
if x[0] < T[0]:
if T[2] == []:
T[2] = [x[0], x[1], [], []]
else:
insert_binary_tree(x, T[2])
else:
if T[3] == []:
T[3] = [x[0], x[1], [], []]
else:
insert_binary_tree(x, T[3])
示例运行,
t = ['Emma', '2002/08/23',
['Anna', '1999/12/03', [], []],
['Paul', '2000/01/13',
['Lara', '1987/08/23',
['John', '2006/05/08', [], []],
['Luke', '1976/07/31', [], []]],
['Sara', '1995/03/14', [], []]]]
def insert_binary_tree(x, T):
if T == []:
T.extend([x[0], x[1], [], []])
else:
if x[0] < T[0]:
insert_binary_tree(x, T[2])
else:
insert_binary_tree(x, T[3])
print(t)
insert_binary_tree(['Abba', '1111/11/11', [], []], t)
print(t)
【问题讨论】:
-
一个原因可能是,如果
T[2]是一个仍在其他地方引用的节点,那么由于.extend突变,该节点也会发生变化。原始代码只会替换那个孩子,其他引用不会受到影响。
标签: python algorithm recursion binary-search-tree