题目
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
解题思路
就是简单的一个二叉树中序遍历,
主要是明白什么是二叉搜索树
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。)
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
@staticmethod
def Convert(pRootOfTree):
# write code here
if pRootOfTree is None:
return None
elif pRootOfTree.left is None and pRootOfTree.right is None:
return pRootOfTree
else:
p_L=Solution.Convert(pRootOfTree.left)
p_R=Solution.Convert(pRootOfTree.right)
if p_L is None and p_R is not None:
pRootOfTree.right=p_R
p_R.left=pRootOfTree
return pRootOfTree
L_head=p_L
while p_L.right is not None:
p_L=p_L.right
p_L.right=pRootOfTree
pRootOfTree.left=p_L
pRootOfTree.right=p_R
if p_R is not None:
p_R.left=pRootOfTree
return L_head