二叉树的右视图-leetcode

题目描述

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

示例 1:

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

输出:[1,3,4]

解释:

img

示例 2:

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

输出:[1,3,4,5]

解释:

img

示例 3:

输入:root = [1,null,3]

输出:[1,3]

示例 4:

输入:root = []

输出:[]

提示:

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

解法一

思路:

层序遍历,同时加上分界符,当一个节点后一个是分界符就表示已经到达该层最右侧的节点,记录。首先在根节点之后就要加入分界符,之后正常入队出队操作,当出队元素为分界符,说明该层元素访问结束,应该在后面添加一个新的分界符。

代码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> rightSideView(TreeNode root) {
    
        List<Integer> res = new ArrayList<>();

        if(root==null) return res;
        
        Queue<TreeNode> queue = new LinkedList<>();

        //构建分界符,使用-101代表分界符
        queue.offer(root);
        queue.offer(new TreeNode(-101));

        while (!queue.isEmpty()) {
            if(queue.peek().val==-101&&queue.size()==1)break;
            TreeNode node = queue.poll();


            //该节点为分界符,添加新的分界符
            if(node.val==-101){
                TreeNode decompose = new TreeNode(-101);
                queue.offer(decompose);
                continue;
            }
            //节点不为空而且下一个为分界符
            if(node!=null&&queue.peek().val==-101){
                res.add(node.val);
            }

            if(node.left!=null) queue.offer(node.left);
            if(node.right!=null) queue.offer(node.right);


        }

        return res;

    }
}
posted @ 2026-03-11 22:09  狐狸胡兔  阅读(2)  评论(0)    收藏  举报