发布于 

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

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

题目链接

<二叉搜索树与双向链表>

问题描述

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

个人想法

中序遍历并使用全局变量存储节点,再进行指针指向的修改(由于不熟悉在递归中连接前后指针,未作出

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
Node pre,head;
//中序遍历 + 存储上个节点
public Node treeToDoublyList(Node root) {
if(root == null) return null;
dfs(root);
head.left = pre;
pre.right = head;
return head;
}
//使用中序遍历完成全过程
void dfs(Node curr){
if(curr == null) return;
dfs(curr.left);
//判断前驱节点是否为空
if(pre != null){
//左指针指向前驱
pre.right = curr;
}else{
//若不存在前驱节点 则当前节点为头节点,记录当前节点
head = curr;
}
curr.left = pre;
pre = curr;
dfs(curr.right);
}
}

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站由 @John Doe 创建,使用 Stellar 作为主题。