199. 二叉树的右视图

  • 难度中等
  • 本题涉及算法DFS BFS
  • 思路DFS BFS
  • 类似题型:

题目 199. 二叉树的右视图

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

示例:

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

   1            <---
 /   \
2     3         <---
 \     \
  5     4       <---

方法一 DFS

解题思路

  • 我们按照 「根结点 -> 右子树 -> 左子树」 的顺序访问,就可以保证每层都是最先访问最右边的节点的

代码

java

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
// 考察的是对二叉数执行顺序
class Solution {
    List<Integer> res = new ArrayList<>();
    public List<Integer> rightSideView(TreeNode root) {
        // 从根节点开始访问,根节点深度是0
        dfs(root,0);
        return res;

    }
    private void dfs(TreeNode root,int deepth){
        if (root ==null) return;
        // 先访问 当前节点,再递归地访问 右子树 和 左子树
        if(deepth==res.size()) res.add(root.val);// 如果当前节点所在深度还没有出现在res里,说明在该深度下当前节点是第一个被访问的节点,因此将当前节点加入res中。
        deepth++;
        dfs(root.right,deepth);
        dfs(root.left,deepth);
    }
}

方法二 BFS

  • 利用 BFS 进行层次遍历,记录下每层的最后一个元素。

  • 二叉树插入队列的如图

pic1

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
// 考察的是对二叉数执行顺序
class Solution {
    public List<Integer> rightSideView(TreeNode root) {
        List<Integer> res = new ArrayList<>();
        if (root == null) return res;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while(!queue.isEmpty()) {
            int size = queue.size();
            for(int i = 0;i<size;i++){
                TreeNode node = queue.poll();
                if (node.left!=null){
                    queue.offer(node.left);
                }
                if (node.right!=null) {
                    queue.offer(node.right);
                }
                if (i==size-1) {
                    res.add(node.val); //将当前层的最后一个节点放入结果列表
                }
            }

        }
        return res;
    }
}