题目描述:
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路:
利用二叉搜索树的中序遍历是递增的顺序,拿一个tail节点记录上次访问的节点,跟这次访问的节点互联再更新tail节点就可以了,代码里的head节点只是帮我们记录最小节点,好快速返回用的。所以好好理解一下else里的代码就可以了。
代码:
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def __init__(self):
self.listHead = None
self.listTail = None
def Convert(self, pRootOfTree):
if pRootOfTree==None:
return
self.Convert(pRootOfTree.left)
if self.listHead==None: #到了最低节点才进去
self.listHead = pRootOfTree
self.listTail = pRootOfTree
else:
self.listTail.right = pRootOfTree
pRootOfTree.left = self.listTail # 只把left给改了,未改right
self.listTail = pRootOfTree
self.Convert(pRootOfTree.right)
return self.listHead