原题
https://leetcode.com/problems/convert-binary-search-tree-to-sorted-doubly-linked-list/
解法
divide and conquer + 递归. 构造traverse函数, 将二叉树转化为双向链表, 返回链表的头和尾.
代码
"""
# Definition for a Node.
class Node(object):
def __init__(self, val, left, right):
self.val = val
self.left = left
self.right = right
"""
class Solution(object):
def treeToDoublyList(self, root):
"""
:type root: Node
:rtype: Node
"""
if not root:
return None
head, tail = self.traverse(root)
return head
def traverse(self, root):
# construct double linked list, return head, tail
head, tail = root, root
if root.left:
left_head, left_tail = self.traverse(root.left)
left_tail.right = root
root.left = left_tail
head = left_head
if root.right:
right_head, right_tail = self.traverse(root.right)
right_head.left = root
root.right = right_head
tail = right_tail
head.left = tail
tail.right = head
return head, tail