Data structures 树插入
上的树插入函数不是不正确吗 插入左侧:Data structures 树插入,data-structures,tree,python-interactive,Data Structures,Tree,Python Interactive,上的树插入函数不是不正确吗 插入左侧: def insertLeft(root,newBranch): t = root.pop(1) if len(t) > 1: root.insert(1,[newBranch,t,[]]) else: root.insert(1,[newBranch, [], []]) return root 我发现逻辑不正确,插入导致树断开 我尝试了下面的方法(您可以在同一页上运行代码),并看到了验
def insertLeft(root,newBranch):
t = root.pop(1)
if len(t) > 1:
root.insert(1,[newBranch,t,[]])
else:
root.insert(1,[newBranch, [], []])
return root
我发现逻辑不正确,插入导致树断开
我尝试了下面的方法(您可以在同一页上运行代码),并看到了验证结果
r = BinaryTree(3)
insertLeft(r,4)
insertLeft(r,5)
insertLeft(r, [10, [11, [],[]], []])
insertRight(r,6)
insertRight(r,7)
print(r)
输出:
[3,
[
[10, [11, [], []], []],
[5, [4, [], []], []],
[]
],
[
7,
[],
[6, [], []]
]
]
结果符合这些功能的预期。以下是:
insertLeft(r, [10, [11, [],[]], []])
…注入一个值作为根的左子级。将提供给该新节点的值是您作为第二个参数提供的值。此函数始终创建一个新节点(三元组),并且您已经为其指定了树结构的值
这在输出中看起来很奇怪,而且结构似乎已损坏,但事实并非如此。值[10、[11、[]、[]]、[]]
只是一个值,它不参与构造主树
也许你想合并两棵树。但是在这种情况下,您应该决定根的左节点上的子树应该发生什么。例如,您可以这样做:
insertLeft(r, 11)
insertLeft(r, 10)
。。。然后前面的子树([5、[4、[]、[]、[]]、[]]
)将成为值为11的节点的子节点
简而言之,为了合并子树,您不能只将一个子树作为参数传递给insertLeft
。该方法仅用于向单个节点注入一个特定值