一、递归之二叉树的遍历
听说力扣刷题很有意思,上去看了看,确实有趣,不要怂就是干,先来一发:
二叉树的前序遍历,递归实现:
/**
* @param {TreeNode} root
* @return {number[]}
*/
var preorderTraversal = function(root) {
let values = [];
values = test(root,values);
return values||[]
}
var test = function(root,values){
if(!root){return}
values.push(root.val);
test(root.left,values);
test(root.right,values);
return values;
}
中序遍历
/**
* @param {TreeNode} root
* @return {number[]}
*/
var inorderTraversal = function(root) {
let values = [];
values = test(root,values);
return values||[]
}
var test = function(root,values){
if(!root){return}
test(root.left,values);
values.push(root.val);
test(root.right,values);
return values;
}
后续遍历
/**
* @param {TreeNode} root
* @return {number[]}
*/
var postorderTraversal = function(root) {
let values = [];
values = test(root,values);
return values||[]
}
var test = function(root,values){
if(!root){return}
test(root.left,values);
test(root.right,values);
values.push(root.val);
return values;
}
好了,接下来是层次遍历:
/**
* @param {TreeNode} root
* @return {number[][]}
*/
var levelOrder = function(root) {
let map = [];
test(root,0,map);
return map||[];
};
var test = function(root,level,map){
if(!root){return}
if(!map[level]){
map[level]=[];
}
map[level].push(root.val);
test(root.left,level+1,map);
test(root.right,level+1,map);
return map;
}
嗯哼,前面的几个就是核心算法做了些改动,后面的层次遍历是增加了层次的概念,得到的是一个数组,有意思~