原题
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