def build_tree(entry, left, right):
return [entry, left, right]
def entry(tree):
return tree[0]
def left_branch(tree):
return tree[1]
def right_branch(tree):
return tree[2]
def make_empty_tree():
return []
t1 = build_tree(2,build_tree(1,make_empty_tree(),make_empty_tree()),build_tree(3,make_empty_tree(),make_empty_tree()))
这些是我目前为二叉树定义的功能。 我希望使用以下函数在T1的右分支中插入一个值。
def insert_tree(x, tree):
if tree == []:
tree.append(x)
return tree
else:
if x <= entry(tree):
return insert_tree(x , left_branch(tree))
else:
return insert_tree(x , right_branch(tree))
但是,这给了我[5]
而不是预期的
[2, [[1],[],[]], [[3],[],[5]]
。
答案 0 :(得分:1)
我猜您打给t1 = insert_tree(t1, 5)
?
问题在于,insert_tree
仅在参数tree == []
的特殊情况下返回。而是在最后返回树。
def insert_tree(x, tree):
if tree == []:
tree.append(x)
else:
if x <= entry(tree):
insert_tree(x , left_branch(tree))
else:
insert_tree(x , right_branch(tree))
return tree
顺便说一句,您的函数未构成树的有效定义,例如left_branch(make_empty_tree())
将失败。
答案 1 :(得分:0)
如果您通过以下方式致电insert_tree
:
insert_tree(5, t1)
然后t1
将变为:
[2, [1, [], []], [3, [], [5]]]
但这不是一棵格式正确的树,因为5棵树也应该有两个空的子节点。您应该改为通过扩展列表再添加两个空列表来初始化树:
def insert_tree(x, tree):
if tree == []:
tree.extend([x, [], []])
return tree
if x <= entry(tree):
return insert_tree(x , left_branch(tree))
else:
return insert_tree(x , right_branch(tree))
这样insert_tree(5, t1)
会变成t1
:
[2, [1, [], []], [3, [], [5, [], []]]]