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

基本思路
dfs(cur) 递归法中序遍历:
- 终止条件:当
cur为空时 代表越过叶节点 直接返回 - 递归左子树
dfs(cur.left) - 构建链表:
- 当
pre为空:代表正在访问链表头节点 记为head - 当
pre不为空:修改双向节点引用 即pre.right = curcur.left = pre - 保存
cur:更新pre = cur即节点cur是后继节点的pre
- 当
- 递归左子树
dfs(cur.right)
treeToDoublyList(root):
- 特例处理:若节点
root为空直接返回 - 初始化:空结点
pre - 转化为双向链表:调用
dfs(root) - 构建循环链表:中序遍历完成后
head指向头节点pre指向尾节点 因此修改head和pre的双向节点引用 - 返回值:返回链表的头节点
head
java实现
1 | /* |