首页 > 代码库 > 数据结构算法实现-二叉树遍历的非递归算法
数据结构算法实现-二叉树遍历的非递归算法
由于递归算法使用系统堆栈,性能较差,所以应尽可能使用非递归算法。
1.先序遍历
先序遍历,即得到节点时输出数据。
// 先序遍历 function PreOrder(node){ if(node!==undefined){ console.log(node.data) } var stack=[] //模仿递归的栈 stack.push(node) for(var temp=node,i=0;temp!==undefined;temp=stack[stack.length-1]){ if(temp.lChild!==null){ console.log(array[temp.lChild].data) //遍历后即将引用设为null var lChild=array[temp.lChild] temp.lChild=null stack.pop() stack.push(temp) stack.push(lChild) }else if(temp.rChild!==null){ console.log(array[temp.rChild].data) //遍历后即将引用设为null var rChild=array[temp.rChild] temp.rChild=null stack.pop() stack.push(temp) stack.push(rChild) }else{ stack.pop() } } } var array=BinaryTree() PreOrder(array[0])
输出
a b d c e f
2.中序遍历
中序遍历也即等到所有左分支都遍历完成后,才开始输出。
// 中序遍历 function InOrder(node){ if(node===undefined) return
var stack=[] //模仿递归的栈 stack.push(node) for(var temp=node,i=0;temp!==undefined;temp=stack[stack.length-1]){ if(temp.lChild!==null){ //遍历后即将引用设为null var lChild=array[temp.lChild] temp.lChild=null stack.pop() stack.push(temp) stack.push(lChild) }else{ if(temp.data!==undefined){ console.log(temp.data) } temp.data=undefined if(temp.rChild!==null){ //遍历后即将引用设为null var rChild=array[temp.rChild] temp.rChild=null stack.pop() stack.push(temp) stack.push(rChild) }else{ stack.pop() } } } } var array=BinaryTree() InOrder(array[0])
输出 b d a c f e
3.后序遍历
也即等到左右分支都遍历完成后,才开始输出。
// 后序遍历 function PostOrder(node){ if(node===undefined) return var stack=[] //模仿递归的栈 stack.push(node) for(var temp=node;temp!==undefined;temp=stack[stack.length-1]){ if(temp.lChild!==null){ //遍历后即将引用设为null var lChild=array[temp.lChild] temp.lChild=null stack.pop() stack.push(temp) stack.push(lChild) }else if(temp.rChild!==null){ //遍历后即将引用设为null var rChild=array[temp.rChild] temp.rChild=null stack.pop() stack.push(temp) stack.push(rChild) }else{ console.log(temp.data) stack.pop() } } } var array=BinaryTree() PostOrder(array[0])
输出 d b f e c a
数据结构算法实现-二叉树遍历的非递归算法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。