Python采用递归方法创建一个二叉搜索树并能实现查找功能
时间: 2023-11-29 10:06:21 浏览: 80
python使用递归的方式建立二叉树
好的,我来介绍一下如何使用Python采用递归方法创建一个二叉搜索树并实现查找功能。
首先,我们需要创建一个二叉搜索树的节点类`TreeNode`,该类包含三个属性:`val`表示节点的值,`left`表示左子节点,`right`表示右子节点。代码如下:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
```
接下来,我们可以使用递归方法来构建二叉搜索树。具体步骤如下:
1. 如果根节点为空,直接将新节点作为根节点;
2. 如果新节点的值小于根节点的值,则递归构建左子树;
3. 如果新节点的值大于根节点的值,则递归构建右子树。
代码如下:
```python
def insert(root, val):
if root is None:
root = TreeNode(val)
elif val < root.val:
root.left = insert(root.left, val)
else:
root.right = insert(root.right, val)
return root
```
接下来,我们可以使用递归方法来查找二叉搜索树中的节点。具体步骤如下:
1. 如果根节点为空或者根节点的值等于目标值,则直接返回根节点;
2. 如果目标值小于根节点的值,则递归查找左子树;
3. 如果目标值大于根节点的值,则递归查找右子树。
代码如下:
```python
def search(root, val):
if root is None or root.val == val:
return root
elif val < root.val:
return search(root.left, val)
else:
return search(root.right, val)
```
下面是一个完整的示例代码,创建一个二叉搜索树并查找其中的节点:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def insert(root, val):
if root is None:
root = TreeNode(val)
elif val < root.val:
root.left = insert(root.left, val)
else:
root.right = insert(root.right, val)
return root
def search(root, val):
if root is None or root.val == val:
return root
elif val < root.val:
return search(root.left, val)
else:
return search(root.right, val)
# 创建一个二叉搜索树
root = insert(None, 5)
root = insert(root, 3)
root = insert(root, 7)
root = insert(root, 1)
root = insert(root, 4)
root = insert(root, 6)
root = insert(root, 8)
# 查找节点
node = search(root, 4)
if node is not None:
print("找到了节点:", node.val)
else:
print("没有找到节点")
```
以上代码输出结果为:
```
找到了节点: 4
```
至此,我们就成功采用递归方法创建了一个二叉搜索树并实现了查找功能。
阅读全文