Python中链表的二叉搜索树转换为排序链表操作
实现二叉搜索树转换为排序链表的操作需要分以下几个步骤:
- 中序遍历二叉搜索树,记录遍历的节点值
- 根据遍历的节点值构建单向链表
- 返回单向链表的头节点
下面是代码演示:
class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next class Solution: def __init__(self): self.cur = None # 用于记录当前遍历到的节点 def bstToSortedList(self, root: TreeNode) -> ListNode: if not root: return None # 构建左子树的单向链表 left_head = self.bstToSortedList(root.left) # 构建当前节点的单向链表 cur_node = ListNode(root.val) if self.cur: # 如果cur不为None,则将cur_node挂接到cur的next节点上 self.cur.next = cur_node self.cur = cur_node # 更新cur为当前节点 # 构建右子树的单向链表 right_head = self.bstToSortedList(root.right) # 将左子树链表、当前节点链表和右子树链表拼接在一起 if left_head: cur_node.next = left_head if right_head: self.cur.next = right_head # 返回单向链表的头节点 if left_head: return left_head else: return cur_node
接下来,我们使用一个例子来演示这个操作的使用。
例如,我们有一棵二叉搜索树如下所示:
5 / \ 3 7 / \ / \ 2 4 6 8
我们需要将它转换为一个排序的单向链表,那么我们可以这样调用函数:
root = TreeNode(5, TreeNode(3, TreeNode(2), TreeNode(4)), TreeNode(7, TreeNode(6), TreeNode(8))) solution = Solution() head = solution.bstToSortedList(root)
最终得到的单向链表的头节点就是 head
了。我们可以遍历这个链表来查看它是否按照顺序排列:
while head: print(head.val) head = head.next # 输出如下: # 2 # 3 # 4 # 5 # 6 # 7 # 8
相关文章