簡體   English   中英

新手插入二叉樹檢查

[英]Newbie inserting into binary tree checks

我正在學習二進制搜索樹,但我不明白為什么此代碼無法插入到二進制搜索樹中:

def insert(self, data, node):
    node_to_insert = Node(data)

    if node is None:
        node = node_to_insert
    else:
        if data < node.data:
            node.left = self.insert(data, node.left)
        else:
            node.right = self.insert(data, node.right)

我知道這段代碼有效:

    def insert(self, data, node):
        node_to_insert = Node(data)

        if node is None:
            node = node_to_insert
        else:
            if data < node.data:
                if node.left is None:
                    node.left = node_to_insert
                else:
                    self.insert(data, node.left)
            else:
                if node.right is None:
                    node.right = node_to_insert
                else:
                    self.insert(data, node.right)

我看到的方式是,當調用該函數時,是否應該執行額外is None檢查?

也是為什么這個工作:

def print_inorder(self, node):
    if node is not None:
        self.print_inorder(node.left)
        print node.data
        self.print_inorder(node.right)

如果在調用self.print_inorder(node.left)之前node.left is None額外的檢查來查看node.left is None

在您的代碼中:

if data < node.data:
    node.left = self.insert(data, node.left)
else:
    node.right = self.insert(data, node.right)

您的方法self.insert返回None ,因此在將數據正確插入到node.leftnode.right ,您將為其分配None 而是你想要

if data < node.data:
    self.insert(data, node.left)
else:
    self.insert(data, node.right)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM