【leetcode】199.二叉树的右视图

【leetcode】199.二叉树的右视图

  • 题目
  • 思路
  • 代码
  • 复杂度

在这里插入图片描述

题目

leetcode原题链接

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

示例 1:
【leetcode】199.二叉树的右视图_第1张图片
输入: [1,2,3,null,5,null,4]
输出: [1,3,4]

示例 2:
输入: [1,null,3]
输出: [1,3]

示例 3:
输入: []
输出: []

提示:
二叉树的节点个数的范围是 [0,100]
-100 <= Node.val <= 100

思路

  • 想一想,从右往左看,看到的节点都有哪些特点呢?每一层都能且只能看到一个节点,且这个节点是每一层的最后一个节点。
  • 根据上面的分析,很显然用二叉树的层序遍历就行了当遇到每一层的最后一个节点时,就把该节点添加到结果数组即可。

代码

在这里插入图片描述

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var rightSideView = function(root) {
    if(!root) return []
    let queue = [root]
    let res = []
    while(queue.length){
        const len = queue.length
        for(let i = 0 ; i < len ; i++){
            const curNode = queue.shift()
            if(i === len - 1) res.push(curNode.val) //判断是否当层的最后一个节点,是的话就保存
            if(curNode.left) queue.push(curNode.left)
            if(curNode.right) queue.push(curNode.right)
        }
    }

    return res
};

复杂度

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)

关注我的专栏,每天更新三道leetcode题解,一起变强!

你可能感兴趣的:(leetcode题解js,leetcode,javascript,前端)