簡體   English   中英

python 帶搜索和刪除功能的二叉樹遍歷

[英]python binary tree traversal with search and delete functions

我創建了一個二叉樹遍歷項目。 不幸的是,我對 python 有基本的了解。 我正確地寫了“preorder”、“inorder”和“postorder”。 但我無法創建查找和刪除節點 function。 請幫忙。 請檢查下面的代碼。 請幫助創建這兩個功能。 謝謝

    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None
    def find(self, value):
        if self.value == value:
            return True
        elif value < self.value and self.left:
            return self.left.find(value)
        elif value > self.value and self.right:
            return self.right.find(value)
        return False
class BinaryTree(object):
    def __init__(self, root):
        self.root = Node(root)
    def print_tree(self, traversal_type):
        if traversal_type == "preorder":
            return self.preorder_print(tree.root, "")
        elif traversal_type == "inorder":
            return self.inorder_print(tree.root, "")
        elif traversal_type == "postorder":
            return self.postorder_print(tree.root, "")
        else:
            print("Traversal type "+str(traversal_type)+" is not supported.")
    def preorder_print(self, start, traversal):
        # Root->Left->Right
        if start:
            traversal += (str(start.value)+"-")
            traversal = self.preorder_print(start.left, traversal)
            traversal = self.preorder_print(start.right, traversal)
        return traversal
    def inorder_print(self, start, traversal):
        # Left->Root->Right
        if start:
            traversal = self.inorder_print(start.left, traversal)
            traversal += (str(start.value) + "-")
            traversal = self.inorder_print(start.right, traversal)
        return traversal
    def postorder_print(self, start, traversal):
        # Left->Right->Root
        if start:
            traversal = self.postorder_print(start.left, traversal)
            traversal = self.postorder_print(start.right, traversal)
            traversal += (str(start.value) + "-")
        return traversal
        # Set up tree order
tree = BinaryTree(1)
tree.root.left = Node(2)
tree.root.right = Node(3)
tree.root.left.left = Node(4)
tree.root.left.right = Node(5)
tree.root.right.left = Node(6)
tree.root.right.right = Node(7)
print("Preorder: " + tree.print_tree("preorder"))    # 1-2-4-5-3-6-7
print("Inorder: " + tree.print_tree("inorder"))      # 4-2-5-1-6-3-7
print("Postorder: " + tree.print_tree("postorder"))  # 4-2-5-6-3-7-1
print(tree.root.find(1))
print(tree.root.find(2))
print(tree.root.find(3))
print(tree.root.find(4))
print(tree.root.find(5))
print(tree.root.find(6))
print(tree.root.find(7))
print(tree.root.find(8)) ```

find 不起作用的原因是您設置的樹不是二叉搜索樹。 在 BST 中,左側的所有節點的值都低於根,而右側的所有節點的值都更高。 檢查您構建的樹。

這是刪除節點的實現。

https://www.geeksforgeeks.org/binary-search-tree-set-2-delete/

暫無
暫無

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

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