非递归遍历二叉树
左根右
var inorderTraversal = function(root) {
// 中序遍历
const number= []
const arr = []
while(true){
while(root){
arr.push(root)
root = root.left
}
if (!arr.length) {
break
}
let temp = arr.pop()
number.push(temp.val)
root = temp.right
}
return number
};
前序和后序基本差不多,后序也是当作前序来做的。注意入栈顺序
根左右
var preorderTraversal = function(root) {
let arr =[]
let number=[]
if (!root){
return []
}
arr.push(root)
while(arr.length){
let temp = arr.pop()
number.push(temp.val)
if (temp.right){
arr.push(temp.right)
}
if (temp.left){
arr.push(temp.left)
}
}
return number
};
左右根
var postorderTraversal = function(root) {
let arr =[]
let number=[]
if (!root){
return []
}
arr.push(root)
while(arr.length){
let temp = arr.pop()
number.push(temp.val)
if (temp.left){
arr.push(temp.left)
}
if (temp.right){
arr.push(temp.right)
}
}
return number.reverse()
};