题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。
输入输出
基本思路
dfs(cur)
递归法中序遍历:
- 终止条件:当
cur
为空时 代表越过叶节点 直接返回 - 递归左子树
dfs(cur.left)
- 构建链表:
- 当
pre
为空:代表正在访问链表头节点 记为head
- 当
pre
不为空:修改双向节点引用 即pre.right = cur
cur.left = pre
- 保存
cur
:更新pre = cur
即节点cur
是后继节点的pre
- 当
- 递归左子树
dfs(cur.right)
treeToDoublyList(root)
:
- 特例处理:若节点
root
为空直接返回 - 初始化:空结点
pre
- 转化为双向链表:调用
dfs(root)
- 构建循环链表:中序遍历完成后
head
指向头节点pre
指向尾节点 因此修改head
和pre
的双向节点引用 - 返回值:返回链表的头节点
head
java实现
1 | /* |