36.二叉搜索树与双向链表
题目
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。
代码分析
代码
/* function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
} */
function Convert(pRootOfTree)
{
// 设置一个空的头结点
let head = null
// 用于记录上一个结点
let pre = null
// 我们这里使用中序遍历,因为二叉搜索树的中序遍历才是递增的
function dfs(cur) {
if(cur === null) return
dfs(cur.left)
if(pre === null) {
head = cur
} else {
pre.right = cur
}
cur.left = pre
pre = cur
dfs(cur.right)
}
dfs(pRootOfTree)
return head
}
module.exports = {
Convert : Convert
};