剑指 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

浙公网安备 33010602011771号