基于非递归的二叉排序树的结点的查找和插入
时间: 2024-02-03 20:13:18 浏览: 254
二叉排序树是一种二叉树,它满足以下条件:
1. 左子树中所有结点的值都小于根结点的值;
2. 右子树中所有结点的值都大于根结点的值;
3. 左右子树都是二叉排序树。
基于这个定义,我们可以实现二叉排序树的结点查找和插入操作,具体步骤如下:
1. 结点查找:从根结点开始,如果要查找的值比当前结点的值小,则在左子树中继续查找;如果要查找的值比当前结点的值大,则在右子树中继续查找;如果要查找的值等于当前结点的值,则查找成功;如果查找到叶子结点仍未找到,则查找失败。
2. 结点插入:从根结点开始,如果要插入的值比当前结点的值小,则在左子树中继续插入;如果要插入的值比当前结点的值大,则在右子树中继续插入;如果要插入的值等于当前结点的值,则插入失败;如果插入到叶子结点,则将新结点插入到该位置,插入成功。
具体实现时,我们可以使用非递归的方式实现结点的查找和插入操作。具体代码如下:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
class BST:
def __init__(self):
self.root = None
# 结点查找
def search(self, val):
curr = self.root
while curr:
if val == curr.val:
return curr
elif val < curr.val:
curr = curr.left
else:
curr = curr.right
return None
# 结点插入
def insert(self, val):
if not self.root:
self.root = TreeNode(val)
return True
curr = self.root
while curr:
if val == curr.val:
return False
elif val < curr.val:
if not curr.left:
curr.left = TreeNode(val)
return True
else:
curr = curr.left
else:
if not curr.right:
curr.right = TreeNode(val)
return True
else:
curr = curr.right
return False
```
以上代码实现了非递归的二叉排序树结点查找和插入操作,可以在 O(log n) 的时间复杂度内完成。
阅读全文