
先序:A->B->D->E->C->F->G
function preTraverStack(root,cb){
let stack = new Stack()
stack.push(root)
while(!stack.isEmpty()){
let node = stack.pop()
if(node.right != null){
stack.push(node.right)
}
if(node.left != null){
stack.push(node.left)
}
cb(node.val)
}
}
中序:D->B->E->A->F->C->G
function inorderTraverStack(root,cb){
let stack = new Stack()
stack.push(root)
while(!stack.isEmpty()){
while(stack.peek().left != null){
stack.push(stack.peek().left)
}
while(!stack.isEmpty()){
let node = stack.pop()
cb(node.val)
if(node.right != null){
stack.push(node.right)
break
}
}
}
}
后序:D->E->B->F->G->C->A
function postTraverStack(root,cb){
let stack = new Stack()
stack.push(root)
let lastNode = null
while(!stack.isEmpty()){
while(stack.peek().left != null){
stack.push(stack.peek().left)
}
while(!stack.isEmpty()){
if(lastNode == stack.peek().right || stack.peek().right == null){
let node = stack.pop()
cb(node.val)
lastNode = node
}else if(stack.peek().right != null){
stack.push(stack.peek().right)
break
}
}
}
}