力扣 Javascript 的中序/前序/后序/层序遍历
几个通用的遍历二叉树算法模板
中序
// 中序
var inorderTraversal = function(root) {
var output = []
let rec = function(node){
if(!node){return}
rec(node.left)
output.push(node.val)
rec(node.right)
}
rec(root)
return output
};
前序
//前序
var preorderTraversal = function(root) {
var output = []
let rec = function(node){
if(!node){return}
output.push(node.val)
rec(node.left)
rec(node.right)
}
rec(root)
return output
};
中序
//后序
var postorderTraversal = function(root) {
var output = []
let rec = function(node){
if(!node){
return
}
rec(node.left)
rec(node.right)
output.push(node.val)
}
rec(root)
return output
};
后序
//后序
var postorderTraversal = function(root) {
var output = []
let rec = function(node){
if(!node){
return
}
rec(node.left)
rec(node.right)
output.push(node.val)
}
rec(root)
return output
};
层序
//层序
var levelOrder = function(root) {
const ret = []; //格式为 [[],[]]
const q = [];
q.push(root);
while (q.length !== 0) {
const node = q.shift();
if (node.left) q.push(node.left);//如果左节点存在则将其加入队列
if (node.right) q.push(node.right);//如果右节点存在则将其加入队列
ret.push(node.val);//将当前层的节点值推入数组
}
return ret;
};