LeetCode 102:二叉树的层序遍历

二叉树的层序遍历

题目描述:

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)

示例 1: 

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]

 示例 2:

输入:root = [1]
输出:[[1]]

示例 3:

输入:root = []
输出:[]

链接:

102. 二叉树的层序遍历 - 力扣(LeetCode) (leetcode-cn.com)

解题思路 

思路一:广度优先搜索

广度优先需要用队列作为辅助结构:

  • 首先根元素入队
  • 当队列不为空的时候
    • 求当前队列的长度length
    • 依次从队列中取 length个元素(即是第 i 层的所有元素,并且按照从左向右的顺序排列)进行拓展,然后进入下一次迭代
  • 队列为空,执行完成,返回结果;
/**
 * @param {TreeNode} root
 * @return {number[][]}
 */
var levelOrder = function (root) {
  if (root === null) return [];
  var res = [], queue = [root];
  while (queue.length) {
    var currentLevelSize = queue.length;
    res.push([]);
    for (let i = 1; i <= currentLevelSize; ++i) {
      var node = queue.shift();
      res[res.length - 1].push(node.val);
      if (node.left !== null) queue.push(node.left);
      if (node.right !== null) queue.push(node.right);
    }
  }

  return res;
};

时间复杂度: O(n);每个点进队出队各一次

空间复杂度: O(n); 队列中元素的个数不超过 n 个

思路二:深度优先搜索

每次递归的时候都需要带一个 index(表示当前的层数),如果对应的 结果 不存在,就加入一个空 数组 进去。并且将当前节点的值push进去。    
然后递归的处理左子树,右子树,同时将层数index+1;  
最后节点为空,返回结果。  

实现代码如下:  

var levelOrder = function (root) {
  if (root === null) return [];
  var res = [];
  var dfs = function (node, depth) {
    if (node === null) return;
    res[depth] = res[depth] || [];
    res[depth].push(node.val);
    dfs(node.left, depth + 1);
    dfs(node.right, depth + 1);
  }
  dfs(root, 0);
  return res;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值