【一天一大 lee】二叉树的前序遍历 (难度:中等) - Day20201027

【一天一大 lee】二叉树的前序遍历 (难度:中等) - Day20201027_第1张图片

题目:

给定一个二叉树,返回它的 前序 遍历。

示例:

输入: [1,null,2,3]
   1
    \
     2
    /
   3

输出: [1,2,3]

抛砖引玉

思路:

深度优先遍历(DFS)

  • 递归遍历二叉树
  • 推送结果数组的顺序:根节点->左节点->右节点

【一天一大 lee】二叉树的前序遍历 (难度:中等) - Day20201027_第2张图片

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var preorderTraversal = function(root) {
     
  let _result = []
  function dfs(node) {
     
    if (node === null) return
    _result.push(node.val)
    if (node.left) dfs(node.left)
    if (node.right) dfs(node.right)
  }
  dfs(root)
  return _result
}

广度优先搜索(BFS)

  • 从根节点开始依次存放到数组中
  • 取出一个节点将节点值存放到结果数组中,并依次推送到数组中(因为只处理的左子树为处理其右子树)
  • 如果取出的节点包含左子树优先讲左子树处理完
  • 如果左子树处理完成再处理所有节点上的右子树
var preorderTraversal = function(root) {
     
  if (root === null) return []

  let queue = [root],
    _result = [],
    node = queue.pop()
  while (queue.length || node !== null) {
     
    while (node != null) {
     
      _result.push(node.val)
      queue.push(node)
      // 处理左子树
      node = node.left
    }
    node = queue.pop()
    // 处理右子树
    node = node.right
  }
  return _result
}

博客: 前端小书童

每天的每日一题,写的题解会同步更新到公众号一天一大 lee 栏目
欢迎关注留言

公众号:前端小书童

你可能感兴趣的:(一天一大leet,二叉树,算法,leetcode,javascript,前端)