二叉树系列 -Js实现将二叉搜索树转化为双向链表

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

首先我们看一下将二叉搜索树转化为双向链表后的样子:
在这里插入图片描述
不难发现其实就是二叉树的中序遍历
要意识到查找二叉树转为排序列表其实只要对排序二叉树中序遍历,(查找二叉树的左子树的节点都小于根,右子树的节点都大于根);
所以可以利用栈进行非递归的遍历
1、先遍历左子树,直到左子树为空的时候,出栈,
2、对出栈元素重新设置该节点的left,right指针(按照中序遍历的顺序去设置left,right指针,上一个节点为上一个出栈的元素,没有时为空,下一个节点为下一个出栈的元素)(记得在Prev为空时设置当前节点为新的头节点)
3、访问该节点的右子树
4、在node不为空或stack不为空时循环执行上述操作

function Convert(node)
{  
    var stack = [];
    var prev ;
    var root ;
    // write code here
    while(node!= null||stack.length!=0){
        while(node!=null){
            stack.push(node);
            node = node.left;
        } 
           node = stack.pop();
        if(!prev){
            root = node;
            node.left = null;
        }else{
            prev.right = node;
            node.left = prev;
        }
         prev = node;
            node = node.right;
    }
    return root;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值