[路飞]_199. 二叉树的右视图

126 阅读2分钟

「这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战

199. 二叉树的右视图

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]

「示例1:」

右视图logo1.jpeg

输入: [1,2,3,null,5,null,4]
​
输出: [1,3,4]
「示例2:」
输入: [1,null,3]
​
输出: [1,3]
「示例3:」
输入: []
​
输出: []
提示:
1. 二叉树的节点个数的范围是 [0,100]
​
1. -100 <= Node.val <= 100 

解题思路

二叉树的右视图:指的是从树的右边观看,能看到的所有节点;

  1. 我们可以通过递归的方式层级遍历,遍历每层的最后一个节点

  2. 找到当前这一层节点的最后以后一个节点的值,放入结果数组里面

  3. 最后我们只需要返回结果集合即可

代码实现

/**
 * 199. 二叉树的右视图
 * @param {TreeNode} root
 * @return {number[]}
 */
var rightSideView = function (root) {
  let res = [], // 结果集合
    queue = []; // 用来保存当前这一层的节点数量
  queue.push(root);
​
  while (queue.length && root) { // 在当前这一层root不为null,并且当前这一层的节点数量不为0的时候
    let len = queue.length;
    while (len--) { // while循环对当前层的节点数量进行自减
      let node = queue.shift();
      if (len === 0) { // 当前层节点数量只剩最后一个的时候
        res.push(node.val); // 保存当前节点,当前节点就是右视图可以看到的这一层的一个节点
      }
      node.left && queue.push(node.left); // 递归左节点
      node.right && queue.push(node.right); // 递归左节点
    }
  }
​
  return res; // 返回结果集合
};

最后如果你对本文有任何的建议或者补充,可以在留言区留言,我会认真阅读每一位读者提出的有效的建议!感谢阅读,记得点赞,Thanks~