题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
解题思路:
参考地址:https://blog.csdn.net/u010005281/article/details/79657259#commentBox
采用中序遍历和递归
定义两个辅助节点lsHead(链表头节点)、lsTail(链表尾节点)。事实上,二叉树只是换了种形式的链表;lsHead用于记录链表的头节点,用于最后算法的返回;lsTail用于定位当前需要更改指向的节点。
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def __init__(self):
self.lsHead=None
self.lsTail=None
def Convert(self, pRootOfTree):
# write code here
if pRootOfTree==None:
return None
self.Convert(pRootOfTree.left)
if self.lsHead==None:
self.lsHead=pRootOfTree
self.lsTail=pRootOfTree
else:
self.lsTail.right=pRootOfTree
pRootOfTree.left=self.lsTail
self.lsTail=pRootOfTree
self.Convert(pRootOfTree.right)
return self.lsHead