刷题-- 二叉搜索树与双向链表

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

基本思想:中序遍历,递归。

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def ConvertNode(self, pCurrentNode, pLastNode):
            if pCurrentNode:
                if pCurrentNode.left:
                    self.ConvertNode(pCurrentNode.left, pLastNode)

                pCurrentNode.left = pLastNode[0]
                if pLastNode[0]:
                    pLastNode[0].right = pCurrentNode

                pLastNode[0] = pCurrentNode

                if pCurrentNode.right:
                    self.ConvertNode(pCurrentNode.right, pLastNode)

            else:
                return None

    def Convert(self, pRootOfTree):
        # write code here
        pLastNode = [None]
        self.ConvertNode(pRootOfTree, pLastNode)
        pHeadNode = pLastNode[0]

        while pHeadNode and pHeadNode.left:
            pHeadNode = pHeadNode.left

        return pHeadNode

猜你喜欢

转载自blog.csdn.net/treasure_z/article/details/80272888