一、先序遍历:
1) 递归实现
function preOrder(root){if(root!=null){ console.log(root); preOrder(root.leftChild); preOrder(root.rightChild); }
}
2) 非递归实现
function preOrder(root){ var arr=[]; var temp=[]; temp.push(root); while(temp!=null){ var a=temp.pop(); arr.push(a); temp.push(a.rightChild); temp.push(a.leftChild); } return arr; }
function preOrder(root){ var temp=[]; var result=[]; var node=root; while(node!=null||temp.length>0){ if(node!=null){ result.push(node); temp.push(node); node=node.leftChild; }else{ node=temp.pop(); node=node.rightChild(); } } return result; }
二、中序遍历
1) 递归
function inOrder(root){ if(root!=null){ inOrder(root.leftChild); console.log(root); inOrder(root.rightChild); } }
2) 非递归
function inOrder(root){ var arr=[]; var result=[]; var node=root; while(node!=null||arr.length>0){ if(node!=null){ arr.push(node); node=node.leftChild; }else{ node=arr.pop(); result.push(node); node=node.rightChild; } } return result; }
三、后序遍历
1) 递归
function postOrder(root){ if(root!=null){ postOrder(root.leftChild); postOrder(root.rightChild); console.log(root); } }
2) 非递归
function postOrder(root){ var temp1=[]; var temp2=[]; var result=[]; var node=root; while(node!=null||temp1.length>0){ if(node!=null){ temp1.push(node); temp2.push(node); node=node.rightChild; }else{ node=temp1.pop(); node=node.leftChild; } } while(temp2.length>0){ result.push(temp2.pop()); } return result; }