静态链表实现二叉排序树
时间: 2023-11-21 21:55:53 浏览: 116
静态链表是一种用数组实现链表的数据结构,它可以用来实现二叉排序树。具体实现方法如下:
1.定义一个结构体,包含三个成员:data(存储节点的值)、lchild(存储左子树的下标)、rchild(存储右子树的下标)。
2.定义一个数组,用来存储所有的节点。
3.定义一个变量,用来记录当前数组中已经使用的节点数。
4.定义一个函数,用来向数组中插入一个节点。插入节点时,先找到插入位置,然后将节点的值、左右子树的下标存入数组中,并更新已使用节点数。
5.定义一个函数,用来中序遍历二叉排序树。中序遍历时,先遍历左子树,然后输出当前节点的值,最后遍历右子树。
6.定义一个函数,用来查找二叉排序树中是否存在某个节点。查找时,从根节点开始,如果当前节点的值等于要查找的值,则返回该节点的下标;如果要查找的值小于当前节点的值,则在左子树中查找;否则在右子树中查找。
7.定义一个函数,用来删除二叉排序树中的某个节点。删除节点时,先查找要删除的节点,然后根据其左右子树的情况进行删除操作。
下面是一个示例代码:
```python
# 定义结构体
class Node:
def __init__(self, data, lchild, rchild):
self.data = data
self.lchild = lchild
self.rchild = rchild
# 定义数组
MAXSIZE = 100
tree = [Node(None, -1, -1) for i in range(MAXSIZE)]
used = 0
# 插入节点
def insert(data):
global used
if used == 0:
tree[0].data = data
used += 1
return
p = 0
while True:
if data < tree[p].data:
if tree[p].lchild == -1:
tree[used].data = data
tree[p].lchild = used
used += 1
return
else:
p = tree[p].lchild
else:
if tree[p].rchild == -1:
tree[used].data = data
tree[p].rchild = used
used += 1
return
else:
p = tree[p].rchild
# 中序遍历
def inorder(p):
if p == -1:
return
inorder(tree[p].lchild)
print(tree[p].data, end=' ')
inorder(tree[p].rchild)
# 查找节点
def search(data):
p = 0
while p != -1:
if data == tree[p].data:
return p
elif data < tree[p].data:
p = tree[p].lchild
else:
p = tree[p].rchild
return -1
# 删除节点
def delete(data):
p = search(data)
if p == -1:
print("无", data)
return
if tree[p].lchild == -1 and tree[p].rchild == -1:
tree[p].data = None
elif tree[p].lchild == -1:
tree[p].data = tree[tree[p].rchild].data
tree[p].lchild = tree[tree[p].rchild].lchild
tree[p].rchild = tree[tree[p].rchild].rchild
elif tree[p].rchild == -1:
tree[p].data = tree[tree[p].lchild].data
tree[p].lchild = tree[tree[p].lchild].lchild
tree[p].rchild = tree[tree[p].lchild].rchild
else:
q = tree[p].lchild
while tree[q].rchild != -1:
q = tree[q].rchild
tree[p].data = tree[q].data
delete(tree[q].data)
# 示例
L = [5, 3, 7, 2, 4, 6, 8]
for i in L:
insert(i)
inorder(0)
print()
delete(5)
inorder(0)
```
阅读全文