二叉搜索树与双向链表

题目描述:

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路:
1,中序遍历
2,不是从根节点开始,而是从中序遍历得到的第一个节点开始。
3,定义两个辅助节点listHead(链表头节点)、listTail(链表尾节点)。
二叉树只是换了种形式的链表;listHead用于记录链表的头节点,用于最后算法的返回;listTail用于定位当前需要更改指向的节点。
二叉搜索树与双向链表

https://blog.****.net/u010005281/article/details/79657259
转换实例:

二叉搜索树与双向链表

代码实现:

// An highlighted block
var foo = 'bar';

Python代码实现:

// An highlighted block
class Solution:
    def Convert(self, pRootOfTree):
        if not pRootOfTree:
            return pRootOfTree
        if not pRootOfTree.left and not pRootOfTree.right:
            return pRootOfTree
        self.Convert(pRootOfTree.left)
        left=pRootOfTree.left
        if left:
            while left.right:
                left=left.right
            left.right=pRootOfTree
            pRootOfTree.left=left
        self.Convert(pRootOfTree.right)
        right=pRootOfTree.right
        if right:
            while right.left:
                right=right.left
            right.left=pRootOfTree
            pRootOfTree.right=right
        while  pRootOfTree.left:
            pRootOfTree=pRootOfTree.left
        return pRootOfTree