怎么用python实现二叉树搜索
时间: 2023-10-02 18:03:43 浏览: 37
二叉树搜索可以通过以下Python代码实现:
```
# 定义二叉树结构
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
# 二叉树搜索函数
def searchBST(root, val):
if not root or root.val == val:
return root
elif root.val > val:
return searchBST(root.left, val)
else:
return searchBST(root.right, val)
```
其中,`TreeNode`类表示二叉树的结构,`searchBST`函数实现了二叉树的搜索功能,输入参数为根节点及待搜索的值。函数通过比较当前节点值与待搜索值的大小关系,递归地在左子树或右子树中继续搜索,直到找到目标节点或到达空节点为止。
相关问题
python的二叉树实现
Python中可以使用类来实现二叉树。以下是一个简单的二叉树实现的示例代码:
```python
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
class BinaryTree:
def __init__(self):
self.root = None
def insert(self, data):
if self.root is None:
self.root = Node(data)
else:
self._insert_recursive(data, self.root)
def _insert_recursive(self, data, node):
if data < node.data:
if node.left is None:
node.left = Node(data)
else:
self._insert_recursive(data, node.left)
else:
if node.right is None:
node.right = Node(data)
else:
self._insert_recursive(data, node.right)
def search(self, data):
return self._search_recursive(data, self.root)
def _search_recursive(self, data, node):
if node is None or node.data == data:
return node
elif data < node.data:
return self._search_recursive(data, node.left)
else:
return self._search_recursive(data, node.right)
# 创建一个二叉树对象
tree = BinaryTree()
# 向二叉树中插入数据
tree.insert(5)
tree.insert(3)
tree.insert(7)
tree.insert(1)
tree.insert(4)
tree.insert(6)
tree.insert(8)
# 在二叉树中搜索数据
print(tree.search(4)) # 输出: <__main__.Node object at 0x0000024C8A407B88>
```
python实现搜索二叉树的非递归查询方法
```
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
def insert(root, value):
if root is None:
return Node(value)
if value < root.value:
root.left = insert(root.left, value)
elif value > root.value:
root.right = insert(root.right, value)
return root
def search(root, value):
if root is None:
return False
stack = []
stack.append(root)
while stack:
node = stack.pop()
if node.value == value:
return True
elif node.value > value and node.left is not None:
stack.append(node.left)
elif node.value < value and node.right is not None:
stack.append(node.right)
return False
root = None
root = insert(root, 50)
insert(root, 30)
insert(root, 20)
insert(root, 40)
insert(root, 70)
insert(root, 60)
insert(root, 80)
print(search(root, 60))
print(search(root, 10))
```
输出:
```
True
False
```