题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路
《剑指offer》P151
对二叉搜索树的中序遍历结果,即为有从小到大的排序结果。遵循这个思路,可以先将二叉搜索树进行中序遍历,将结果保存在list
中,然后依次取出node
对其左右孩子重新连接。
code
# -*- 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 not pRootOfTree:
return None
result = []
node_stack = []
node = pRootOfTree
while node or node_stack:
while node:
node_stack.append(node)
node = node.left
node = node_stack.pop()
result.append(node)
node = node.right
# 根据排序的顺序重新给左右孩子赋值
# 第一个结点的左孩子和第二个结点的右孩子为空
left = None
pHead = result[0]
while result:
node = result.pop(0)
if left:
left.right = node
node.left = left
left = node
node.right = None
return pHead