原题
https://leetcode.com/problems/convert-binary-search-tree-to-sorted-doubly-linked-list/
解法
使用递归, base case是如果node为空, 返回None. 定义helper函数, 使用头结点和尾节点, 将子链表的头结点和尾节点与母链表相连.
Time: O(v), v是二叉树的节点数目
Space: O(v)
代码
"""
# Definition for a Node.
class Node:
def __init__(self, val, left, right):
self.val = val
self.left = left
self.right = right
"""
class Solution:
def treeToDoublyList(self, root):
"""
:type root: Node
:rtype: Node
"""
# base case
if not root: return None
head, tail = self.helper(root)
return head
def helper(self, root):
'''construct a doubly-linked list, return the head and tail'''
head, tail = root, root
if root.left:
left_head, left_tail = self.helper(root.left)
left_tail.right = root
root.left = left_tail
head = left_head
if root.right:
right_head, right_tail = self.helper(root.right)
right_head.left = root
root.right = right_head
tail = right_tail
head.left = tail
tail.right = head
return head, tail
本文介绍了一种将二叉搜索树转换为排序双向链表的方法,使用递归方式构建链表,并确保时间复杂度为O(n),空间复杂度为O(n)。通过定义辅助函数处理子链表连接,最终返回头结点。
539

被折叠的 条评论
为什么被折叠?



