剑指 Offer 36. 二叉搜索树与双向链表

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

  →

方法:中序遍历  时间复杂度O(n)  空间复杂度O(n) 

二叉搜索树的递增顺序为其中序遍历,故在中序遍历的时候修改节点即可,但需用全局变量记住head,单独头尾相连

class Solution(object):
    def treeToDoublyList(root):
        """
        :type root: Node
        :rtype: Node
        """
        if root is None:
            return None
        
        def inorder(root):
            if root is None:
                return None
            
            inorder(root.left)
            if self.pre:
                self.pre.right,root.left = root,self.pre
            else:
                self.head = root
            self.pre = root
            inorder(root.right)
        
        self.pre = None
        self.head = None
        inorder(root)
        self.head.left,self.pre.right = self.pre,self.head  # 首尾相连

        return self.head
posted @ 2022-08-06 11:38  Liang-ml  阅读(24)  评论(0)    收藏  举报