输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
基本思想:中序遍历,递归。
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def ConvertNode(self, pCurrentNode, pLastNode):
if pCurrentNode:
if pCurrentNode.left:
self.ConvertNode(pCurrentNode.left, pLastNode)
pCurrentNode.left = pLastNode[0]
if pLastNode[0]:
pLastNode[0].right = pCurrentNode
pLastNode[0] = pCurrentNode
if pCurrentNode.right:
self.ConvertNode(pCurrentNode.right, pLastNode)
else:
return None
def Convert(self, pRootOfTree):
# write code here
pLastNode = [None]
self.ConvertNode(pRootOfTree, pLastNode)
pHeadNode = pLastNode[0]
while pHeadNode and pHeadNode.left:
pHeadNode = pHeadNode.left
return pHeadNode