题解 | #二叉搜索树与双向链表#
二叉搜索树与双向链表
https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5
/* function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
} */
function Convert(pRootOfTree)
{
if(!pRootOfTree) return null;
const link = traverse(pRootOfTree);
return link[0];
}
/**
* 中序遍历 => 左为前 右为后
*
* 结点的左指针指向前驱,右指针指向后继
*/
function traverse(root, link = []) {
if(root == null) return null;
traverse(root.left, link);
const cur = root;
if(link.length > 0) {
const last = link[link.length - 1];
cur.left = last;
last.right = cur;
} else {
cur.left = null
}
link.push(cur);
traverse(root.right, link);
return link;
}
module.exports = {
Convert : Convert
};
思路:
输出的双向链表正好是 二叉树 中序遍历的结果,所以自然而然选用 中序遍历。
中序递归遍历是比较简单的。
递归三部曲:
1、确定参数和返回值,这里我们选择传入root,返回 link
2、终止条件 遇到空结点就返回 null
3、单层递归逻辑 就是处理结点的前驱和后继
// [last <- cur] cur.pre = link[last]; // [last -> cur] link[last].next = cur;
查看15道真题和解析
韶音科技公司氛围 640人发布