📅  最后修改于: 2023-12-03 15:22:01.878000             🧑  作者: Mango
在创建一个排序的链表时,我们需要先将二叉树进行中序遍历,获取到所有节点,并按照值的大小排序,然后将它们连接起来,就可以得到一个排序的链表了。
以下是用Python语言实现从给定的二叉树创建一个排序的链表的代码:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def sortedListFromBST(root: TreeNode) -> ListNode:
# 中序遍历,将节点加入到数组中
def inorder(node, array):
if node:
inorder(node.left, array)
array.append(ListNode(node.val))
inorder(node.right, array)
# 对数组进行排序
def sort_array(array):
if not array:
return None
if len(array) == 1:
return array[0]
mid = len(array) // 2
left = sort_array(array[:mid])
right = sort_array(array[mid:])
return merge(left, right)
# 合并两个有序链表
def merge(l1, l2):
dummy = ListNode()
tail = dummy
while l1 and l2:
if l1.val < l2.val:
tail.next = l1
l1 = l1.next
else:
tail.next = l2
l2 = l2.next
tail = tail.next
tail.next = l1 or l2
return dummy.next
# 返回链表的头节点
array = []
inorder(root, array)
return sort_array(array)
通过中序遍历将二叉树转化为数组,再使用排序算法将数组排序,最后将链表的指针进行连接,得到一个排序好的链表。这是一个时间复杂度为 $O(nlogn)$ 和空间复杂度为 $O(n)$ 的解决方案。