题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。
为了让您更好地理解问题,以下面的二叉搜索树为例:
我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。
下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点
题解
DFS递归
这道题明显是要用到二叉搜索树中序遍历递增的性质.
思路与反转链表一样, 每遍历到一个节点, 假设当前节点是cur
, 之前的节点是pre
, 那么令pre.right = cur
, cur.left = pre
. 然后更新pre
的位置, 令pre=cur
, 而cur
会随着递归过程自动更新位置
如果遍历当前pre
为空, 那么说明这是遍历到的第一个节点, 记为head
, 全部遍历完成后, pre
就是尾部节点, 将这两个节点相连即可构成双循环链表
1 | class Solution { |