Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python树中插入新值_Python_List_Tree_Insert_Binary Search Tree - Fatal编程技术网

在python树中插入新值

在python树中插入新值,python,list,tree,insert,binary-search-tree,Python,List,Tree,Insert,Binary Search Tree,我有一棵树,像: tree = [[[None,1,None],2,[None,3,None]],4,[None,6,[None,7,None]]] 数字表示每个节点的根,无表示没有值的子节点 例如,主根是4,[[None,1,None],2,[None,3,None]]是左边的子树,而这个[None,6,[None,7,None]]是右边的子树。左边子树上的主根是2等 我的问题是我想在这棵树中插入一个值 例如,我想要添加值5,这就是我想要的: tree = [[[None, 1, None]

我有一棵树,像:

tree = [[[None,1,None],2,[None,3,None]],4,[None,6,[None,7,None]]]
数字表示每个节点的根,无表示没有值的子节点

例如,主根是4,[[None,1,None],2,[None,3,None]]是左边的子树,而这个[None,6,[None,7,None]]是右边的子树。左边子树上的主根是2等

我的问题是我想在这棵树中插入一个值

例如,我想要添加值5,这就是我想要的:

tree = [[[None, 1, None], 2, [None, 3, None]], 4, [[None, 5, None], 6, [None, 7, None]]]
我的函数有两个参数,树和整数要相加,我需要使用递归函数,例如,这是我开始的:

def insert(tree,int):
    cur = tree
    prev = None
    while cur != None:
        prev = cur
        if int < cur[1]:
            cur = cur[0]
        else :
            cur = cur[2]
def插入(树,int):
cur=树
prev=无
而cur!=无:
prev=cur
如果int

提前感谢

这可以通过树遍历找到目标节点并用所需值替换其元素来完成

# Do an in-order traversal recursively
def in_order(tree):
    if tree is None:
        return
    for element in in_order(tree[0]):
        yield element
    yield tree
    for element in in_order((tree[2])):
        yield element

# helper method to create a new node
def new_node(val):
    return [None, val, None]

if __name__ == '__main__':
    tree = [[[None, 1, None], 2, [None, 3, None]], 4, [None, 6, [None, 7, None]]]
    print(tree)
    # Search for the target node with the value 6 and create a new node as its left child 
    for element in in_order(tree):
        if element[1] == 6:
            element[0] = new_node(5)
    print(tree)
由于树遍历是访问树中所有节点的通用方法,因此可以修改它以查找其他节点。 例如:

# Finding leaf nodes
for element in in_order(tree):
    if element[0] is None and element[2] is None:
        # Do something
        pass

预序和后序遍历也适用。

既然您提到了递归,下面是一个使用递归的解决方案:

def insert_节点(根,节点):
如果root==[None]:#空树的角案例
root.append(节点)
root.append(None)#现在root将是:[无,节点,无]
返回

如果节点是您的树,则二叉搜索树?
int
不建议作为变量名。@Maaddy它不是二叉树,因为节点可以有两个以上的子节点它是二叉树:)啊,我现在明白了!我的错