199. 二叉树的右视图

112 阅读1分钟

1.题目描述\color{DodgerBlue}{1.题目描述}

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

示例 1:

image.png

输入: [1,2,3,null,5,null,4]
输出: [1,3,4]

示例 2:

输入: [1,null,3]
输出: [1,3]

示例 3:

输入: []
输出: []

2.解题思路\color{DodgerBlue}{2.解题思路}

3.JavaScript代码\color{DodgerBlue}{3.JavaScript代码}

/**
 * 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) {
    const res = []
    if(!root) {
        return res
    }
    let queue = [root] // 维护层次遍历的队列
    while(queue.length) {
        let curLength = queue.length
        for(let i = 0; i < curLength; i++) { //遍历当前层,并输入最右边的节点
            let head = queue.pop()
            if(head.left !== null) {
                queue.unshift(head.left) // 往队列左边插入左节点
            }
            if(head.right !== null) {
                queue.unshift(head.right)
            }
            if(i === curLength - 1) { // 当前层遍历完,存入最后的节点
                res.push(head.val)
            }
        }
    }
    return res
};
/**
 * 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) {
    const res = []
    if(!root) {
        return res
    }
    function dfs(root, level) {
        if(root === null) {
            return;
        }
        if(level === res.length) { // 该层次第一次访问的节点(先右后左),存入res
            res.push(root.val)
        }
        level++
        dfs(root.right, level)
        dfs(root.left, level)
    }
    dfs(root, 0)
    return res
};