0
votes

I create a binary tree traversal project. Unfortunately, I have a basic knowledge of python. I wrote "preorder", "inorder" and "postorder" correctly. But I can not create find and delete node function. please help. Please check the code below. Please help to create those 2 functions. Thank you

    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)) ```
1

1 Answers

0
votes

The reason find is not working is the tree you have setup is not a binary search tree. In a BST all nodes to the left have values lower than the root and all nodes to the right have higher values. Check the tree you have constructed.

Here is the implementation for delete node.

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