(53)~144. 二叉树的前序遍历

104 阅读1分钟

昨天刚在一道题中,用到二叉树的中序遍历和前序遍历,今天又写,还是写不全,就这之前前中后都写过,还是不行啊 image.png 后面右看解析对比 最重代码如下,迭代大概都对只不过最后逻辑处理反了

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;
};

力扣本题传送门