【剑指Offer】27二叉搜索树与双向链表
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
时间限制:1秒;空间限制:32768K
解题思路
递归思路。先解决输入为空的特殊情况;遇到叶子节点则返回节点;左子树递归,将左子树转换后结果的最大值即最右的值与根节点的left连接;再将右子树递归,将右子树转换后结果的最小值即最左的值(链表头值)与根节点的right连接;最后返回的是左子树递归结果的链表头。
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def Convert(self, pRootOfTree):
# write code here
if pRootOfTree == None:
return pRootOfTree
if pRootOfTree.left==None and pRootOfTree.right==None:
return pRootOfTree
# 左子树递归
left = self.Convert(pRootOfTree.left)
p = left
if left!= None:
while p.right != None:
p = p.right
# 找到最大值,即最右的值,和根节点连接
p.right = pRootOfTree
pRootOfTree.left = p
# 右子树递归
right = self.Convert(pRootOfTree.right)
if right!= None:
# 找到最小值,即最左的值(链表头值)和根节点连接
right.left = pRootOfTree
pRootOfTree.right = right
if left != None:
return left
else:
return pRootOfTree