昨天刚在一道题中,用到二叉树的中序遍历和前序遍历,今天又写,还是写不全,就这之前前中后都写过,还是不行啊
后面右看解析对比 最重代码如下,迭代大概都对只不过最后逻辑处理反了
var preorderTraversal = function(root, res = []) {
// 方法一 迭代
if(!root) return [];
// 这一次我用迭代写的时候 就是不知道怎么返回, 最重返回的肯定是数组,但是数组也要有之前的值
// 直接把返回的res写在迭代里面的话 每次进入res都变成[] 所以最后一步还是只有一个 想把发把之前的保存,就需要在参数中存一个
// let res = []
// const val = root.val;
res.push(root.val)
preorderTraversal(root.left, res);
preorderTraversal(root.right, res);
return res;
// 方法二
// const s = [root];
// const val = [];
// while(s.length) {
// const top = s.pop();
// val.push(top.val)
// // 这一步 前序遍历是 根 左 右,后面左右的时候处理要先右后左
// top.right && s.push(top.right);
// top.left && s.push(top.left);
// }
// return val;
};
迭代如果不在原函数里面定义res的话,就需要自己在写一个function 来函数内迭代,代码如下,
var preorderTraversal = function(root) {
// 方法一 迭代 第二种方法
if(!root) return [];
const res = []
function helper(node){
if(!node) return;
res.push(node.val);
helper(node.left);
helper(node.right);
}
helper(root)
return res;
};