剑指OFFER----36、二叉搜索树与双向链表(js实现)

博客给出将二叉搜索树转换成排序双向链表的题目,要求不能创建新结点,仅调整指针指向。提供了解题思路,先中序遍历进行right指向,再从头遍历依据right指向进行left指向,最后头尾互连,还给出了leetcode链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目


思路

  • 先中序遍历进行right指向
  • 再从头开始遍历,依据right指向进行left指向
  • 头尾互连

代码

/**
 * // Definition for a Node.
 * function Node(val,left,right) {
 *    this.val = val;
 *    this.left = left;
 *    this.right = right;
 * };
 */
/**
 * @param {Node} root
 * @return {Node}
 */
var treeToDoublyList = function(root) {
    if (!root) return null
    if (!root.left && !root.right) {
        root.left = root
        root.right = root
        return root
    }
    let firstNode = null
    let lastNode = null
    let prevNode = null
    function order(node) {
        if (!node) return
        order(node.left)
        if (!firstNode) firstNode = node
        if (!prevNode) {
            prevNode = node
        } else {
            prevNode.right = node
            prevNode = node
        }
        order(node.right)
    }
    order(root)
    let node = firstNode
    while (node.right) {
        node.right.left = node
        node = node.right
        lastNode = node
    }
    firstNode.left = lastNode
    lastNode.right = firstNode
    return firstNode
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值