数据结构算法实现-二叉树遍历的非递归算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构算法实现-二叉树遍历的非递归算法相关的知识,希望对你有一定的参考价值。
由于递归算法使用系统堆栈,性能较差,所以应尽可能使用非递归算法。
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
以上是关于数据结构算法实现-二叉树遍历的非递归算法的主要内容,如果未能解决你的问题,请参考以下文章
每日一题如何进行二叉树的各种遍历的非递归算法实现?简要讲述。