Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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 3.x 无法在二叉树中插入节点_Python 3.x - Fatal编程技术网

Python 3.x 无法在二叉树中插入节点

Python 3.x 无法在二叉树中插入节点,python-3.x,Python 3.x,我正在尝试编写一个简单的二叉树类,其中包含插入和删除节点的方法。我编写的insert_node方法没有将节点添加到树中。我认为在使用该方法插入节点时,对二叉树对象的引用丢失了。帮我找出原因 class Node: def __init__(self, data): self.data = data self.left = None self.right = None class binary_tree: def __init_

我正在尝试编写一个简单的二叉树类,其中包含插入和删除节点的方法。我编写的insert_node方法没有将节点添加到树中。我认为在使用该方法插入节点时,对二叉树对象的引用丢失了。帮我找出原因

class Node:

    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None

class binary_tree:

    def __init__(self, data):
        self.root = Node(data)

    def insert_node(self, data):
        queue = []
        queue.append(self.root)
        while queue:
            temp = queue.pop(0)
            if temp is None:
                temp = Node(data)
            else:
                queue.append(temp.left)
                queue.append(temp.right)
您可以查看,也可以使用:

def insert_node(self, data): 

    queue = []  
    temp = self.root
    queue.append(temp)  


    # Do level order traversal until we find  
    # an empty place.  
    while (queue):  
        temp = queue.pop(0)  

        if (not temp.left): 
            temp.left = Node(data)  
            break
        else: 
            queue.append(temp.left)  

        if (not temp.right): 
            temp.right = Node(data)  
            break
        else: 
            queue.append(temp.right)  

请看这行代码:

temp = Node(data)
在这里您创建了新节点,为了将其添加到树中,您应该在其父节点中将其设置为
left
right
。在
队列中
您应该保存父节点,同时保存左、右子节点,因此当您要插入新节点时,您没有对父节点的引用:

  parent
 /     \
left   right
例如,is left是
None
,您应该将新节点作为left插入父节点,但您不保留对其父节点的引用,您的队列中只有
None
(左节点)

带注释的更正代码:

class binary_tree:

    def __init__(self, data):
        self.root = Node(data)

    def insert_node(self, data):
        queue = [self.root]  # start from root, it's always not None
        while queue:
            temp = queue.pop(0)  # get current parent node
            if temp.left is None:  # if left child doesn't exist, add new node as left child for parent
                temp.left = Node(data)
                return  # node added, exit
            elif temp.right is None:  # if right child doesn't exist, add new node as right child for parent
                temp.right = Node(data)
                return   # node added, exit
            else:  # both child nodes exist - add them to queue
                queue.append(temp.left)
                queue.append(temp.right)