用python把二叉搜索树转换成循环的双链表
时间: 2023-08-04 18:16:50 浏览: 117
有序链表转换二叉搜索树.md
可以使用中序遍历二叉树的方式,将其转换为有序的列表,然后将列表中的元素依次连接成双向链表即可。
以下是代码实现:
```python
class Node:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def bst_to_dll(root):
# 中序遍历二叉树,将节点值存入数组
def inorder(root):
if not root:
return []
return inorder(root.left) + [root] + inorder(root.right)
# 将有序数组转换为双向链表
def to_dll(arr):
n = len(arr)
for i in range(n):
arr[i].left = arr[i-1]
arr[i].right = arr[(i+1)%n]
return arr[0]
# 主函数
if not root:
return None
arr = inorder(root)
return to_dll(arr)
```
其中,`Node` 类表示二叉树节点,`bst_to_dll` 函数接受根节点 `root`,返回转换后的双向链表的头节点。
可以使用以下代码进行测试:
```python
root = Node(4)
root.left = Node(2)
root.right = Node(5)
root.left.left = Node(1)
root.left.right = Node(3)
head = bst_to_dll(root)
node = head
for i in range(5):
print(node.val)
node = node.right
```
输出结果为:
```
1
2
3
4
5
```
阅读全文