中序遍历JS非递归版

二叉搜索树与双向链表

http://www.nowcoder.com/questionTerminal/947f6eb80d944a84850b0538bf0ec3a5

/**
 * 将二叉搜索树转换成双向链表,不能新增节点,只能修改原有节点
 * left 表示链表的上一个节点,right 表示下一个节点
 * 
 * 思路:
 * 中序遍历二叉树,用 pre 保存上一个遍历到的节点即可
 * 
 * @param {Node} head 
 */

function Convert(head)
{
  if(!head) return null
  let stack = []
  let node = head
  let newHead = null
  let pre = null
  while(stack.length || node) {
    if(node) {
      stack.push(node)
      node = node.left
    } else {
      node = stack.pop()

      // 保存链表头
      if(!newHead) newHead = node

      // 改变节点指向
      if(pre) {
        pre.right = node
        node.left = pre
      }

      pre = node
      node = node.right
    }
  }
  return newHead
}
全部评论

相关推荐

01-16 18:48
四川大学 Java
KalznAsawind:人问他哪一个是pdd,他倒介绍起来了。。。
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务