题目
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路
递归
代码
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def conv(self, root):
if not root:
return root, root
if not root.left and not root.right:
return root, root
left, right = None, None
if root.left:
left = self.conv(root.left)
if root.right:
right = self.conv(root.right)
leftMin, leftMax, rightMin, rightMax = None, None, None, None
if left:
leftMin, leftMax = left[0], left[1]
root.left = leftMax
if leftMax:
leftMax.right = root
if right:
rightMin, rightMax = right[0], right[1]
root.right = rightMin
if rightMin:
rightMin.left = root
if not leftMin: leftMin = root
if not rightMax: rightMax = root
return leftMin, rightMax
def Convert(self, pRootOfTree):
# write code here
return self.conv(pRootOfTree)[0]