题目描述

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

示例 1: 输入:root = [1,2,3,null,5,null,4]
输出:[1,3,4]
解释:

示例 2: 输入:root = [1,2,3,4,null,null,null,5]
输出:[1,3,4,5]
解释:
示例 3: 输入:root = [1,null,3]
输出:[1,3]

示例 4: 输入:root = []
输出:[]

思路&js代码

1、深度优先搜索

先递归右子树,再递归左子树,当某个深度首次到达时,对应的节点就在右视图中。

var rightSideView = function(root) {
    const ans = [];
    function dfs(node, depth) {
        if (node === null) {
            return;
        }
        if (depth === ans.length) { // 这个深度首次遇到
            ans.push(node.val);
        }
        dfs(node.right, depth + 1); // 先递归右子树,保证首次遇到的一定是最右边的节点
        dfs(node.left, depth + 1);
    }
    dfs(root, 0);
    return ans;
};