因此,我正在尝试在我的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] 删除。
我来说两句