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
。该方法仅用于向单个节点注入一个特定值