1.问题描述
输入一棵二叉搜索树,转换成排序的双向链表,要求不能新建结点,只能调整原有结点的指向。
2.思路解析
借助中序遍历,先对左子树排序,记录listtail。在访问根节点时,更新listtail和根节点的指针,listtail变为根节点,然后对右子树排序。
3.python代码
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def __init__(self):
self.listheadnode=None
self.listtailnode=None
def Convert(self, pRootOfTree):
# write code here
if pRootOfTree==None:
return
self.Convert(pRootOfTree.left)
if self.listheadnode==None:
self.listheadnode = pRootOfTree
self.listtailnode = pRootOfTree
else:
self.listtailnode.right = pRootOfTree
pRootOfTree.left = self.listtailnode
self.listtailnode = pRootOfTree
self.Convert(pRootOfTree.right)
return self.listheadnode