package org.example; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Deque; import java.util.List; class Solution { public ListInteger rightSideView(TreeNode root) { // 二叉树的右视图 ListInteger rightSideView new ArrayList(); // 双向队列 DequeTreeNode deque new ArrayDeque(); if (root ! null) { deque.add(root); } // 二叉树的层序遍历 // 但是只将每一层的最后一个结点也就是最右边的结点加入至 rightSideView 中 while (!deque.isEmpty()) { // 获取该层的结点数量 int size deque.size(); while (size 0) { // 获取位于队首的结点 TreeNode treeNode deque.poll(); // 记录该层的最后一个结点 if (size 1) { rightSideView.add(treeNode.val); } // 将下一层的结点加入队列 if (treeNode.left ! null) { deque.add(treeNode.left); } if (treeNode.right ! null) { deque.add(treeNode.right); } // 更新 size size--; } } // 返回二叉树的右视图 return rightSideView; } }