二进制搜索树-在Python中搜索Fcn

硅藻土

因此,我正在尝试在我的BinaryTree课程中实现搜索功能基本上,我True从递归函数返回一个_search,但它保持循环的其余部分运行,而不是脱离该_search方法。我以为return应该突破这种方法?下面是输出和代码。

输出:

1
2
4
5
3
 
1
2
4
5
3

码:

class Node(object):
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None

class BinaryTree(object):
    def __init__(self, root):
        self.root = Node(root)

    def print_tree(self):
        """Print out all tree nodes
        as they are visited in
        a pre-order traversal."""
        
        return ""

    def preorder_print(self, start, traversal):
        """Helper method - use this to create a 
        recursive print solution."""
        return traversal


    def search(self, find_val):
        """Return True if the value
        is in the tree, return
        False otherwise."""
        return self._search(self.root, find_val)

        
    def _search(self, current_node, find_val):
        """Helper method - use this to create a 
        recursive search solution."""
        # check if current node = val
        print(current_node.value)
        if current_node.value == find_val:
            return True 
        # 
        elif current_node.left or current_node.right:
            self._search(current_node.left, find_val)
            self._search(current_node.right, find_val)
        return False
        



# Set up tree
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)

# Test search
# Should be True
tree.search(4)
print(" ")
# Should be False
tree.search(6)

# Test print_tree
# Should be 1-2-4-5-3
print tree.print_tree()
维杰

给定输入的第一件事不是二进制搜索树,而是二进制树。

对于BST,右侧的所有子节点应大于根,而左侧的所有子节点应小于根。

但是对于这种二叉树解决方案,问题如下:

        elif current_node.left or current_node.right:
            self._search(current_node.left, find_val)
            self._search(current_node.right, find_val) 

因此,如果左侧或右侧节点都在那儿,则您将在两侧进行递归搜索,而不会返回任何内容。因此,您需要将其更改为以下内容:

        elif current_node.left:
            return self._search(current_node.left, find_val)
        elif current_node.right:
            return self._search(current_node.right, find_val)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章