前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【一天一大 lee】二叉树的前序遍历 (难度:中等) - Day20201027

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

作者头像
前端小书童
发布2020-11-03 10:16:17
2280
发布2020-11-03 10:16:17
举报
文章被收录于专栏:前端小书童

20201027

题目:

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

示例:

代码语言:javascript
复制
输入: [1,null,2,3]
   1
    \
     2
    /
   3

输出: [1,2,3]

抛砖引玉

思路:

深度优先遍历(DFS)

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

抛砖引玉

代码语言:javascript
复制
/**
 * 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)

  • 从根节点开始依次存放到数组中
  • 取出一个节点将节点值存放到结果数组中,并依次推送到数组中(因为只处理的左子树为处理其右子树)
  • 如果取出的节点包含左子树优先讲左子树处理完
  • 如果左子树处理完成再处理所有节点上的右子树
代码语言:javascript
复制
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 栏目 欢迎关注留言

公众号:前端小书童

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端小书童 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目:
    • 示例:
    • 抛砖引玉
      • 深度优先遍历(DFS)
        • 广度优先搜索(BFS)
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档