用python将二叉搜索树转换为双链表
时间: 2024-02-12 20:09:35 浏览: 78
Python二叉搜索树与双向链表转换实现方法
以下是将二叉搜索树转换为双向链表的 Python 代码:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def treeToDoublyList(self, root: TreeNode) -> TreeNode:
if not root:
return None
self.head = None
self.prev = None
self.dfs(root)
self.head.left = self.prev
self.prev.right = self.head
return self.head
def dfs(self, node):
if not node:
return
self.dfs(node.left)
if self.prev:
self.prev.right = node
node.left = self.prev
else:
self.head = node
self.prev = node
self.dfs(node.right)
```
这个方法的基本思路是对二叉搜索树进行中序遍历,然后将遍历结果转换成双向链表。
我们首先定义了一个 `TreeNode` 类来表示二叉搜索树的节点,其中 `val` 表示节点的值,`left` 和 `right` 分别表示节点的左右子节点。
然后在 `Solution` 类中,我们定义了一个 `dfs` 方法来进行中序遍历,该方法接收一个节点作为参数。
在 `dfs` 方法中,我们先递归遍历节点的左子树,然后将当前节点与前一个节点进行连接。如果前一个节点存在,则将其右子树指向当前节点,同时将当前节点的左子树指向前一个节点;否则,将 `self.head` 指向当前节点,表示当前节点为双向链表的头节点。
最后,我们递归遍历节点的右子树,并将前一个节点更新为当前节点。
在主函数中,我们调用 `dfs` 方法进行中序遍历,并将双向链表的头节点的左指针指向前一个节点,将前一个节点的右指针指向头节点,最后返回头节点即可。
阅读全文