中序遍历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
} 
