题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
给个图就好理解一点题目了:
二叉树的left,right分别代表左右子树,双向链表中的left,right分别代表左指针和右指针。要对二叉搜索树进行排序,第一个想到的就是中序遍历。对于链表,用res表示头,flag表示要修改的节点,最后返回res就好,详见这里:
# -*- 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
self.res, self.flag = None, None
self.convert(pRootOfTree)
return self.res
def convert(self, root):
if not root:
return None
self.convert(root.left)
if self.res == None:
self.res, self.flag = root, root
else:
self.flag.right = root
root.left = self.flag
self.flag = root
self.convert(root.right)