lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1. 题目

 

2. 解法

什么是二叉树的右视图  

二叉树的右视图是指从二叉树的右侧看,能够看到的节点的值的序列

例如,给定一个二叉树:

    1
   / \
  2   3
   \   \
    5   4

从右侧看,能够看到的节点的值是 [1, 3, 4],这就是二叉树的右视图。

一种求解二叉树的右视图的方法是使用层序遍历,每次记录每一层的最后一个节点的值,作为右视图的一部分。

 

实现思路

一种可能的解法是:使用层序遍历,每次记录每一层的最后一个节点的值,作为右视图的一部分

  • 首先,创建一个空的结果列表,用于存放右视图的节点值。
  • 然后,判断根节点是否为空,如果为空,就直接返回空列表。
  • 接着,创建一个队列,用于层序遍历二叉树。将根节点入队。
  • 然后,进入一个循环,当队列不为空时,执行以下操作:
    • 获取当前层的节点数,记为size。
    • 遍历当前层的节点,每次出队一个节点,记为node。
    • 如果当前节点是当前层的最后一个节点(即i == size - 1),就将它的值加入结果列表。
    • 如果当前节点有左子节点,就将左子节点入队。
    • 如果当前节点有右子节点,就将右子节点入队。
  • 最后,返回结果列表。

这样,我们就可以按照从上到下,从右到左的顺序,获取每一层的最右边的节点的值,组成右视图。

 

实现

 

   public static List<Integer> rightSideView(TreeNode root) {
        List<Integer> ans = new ArrayList<>();
        if (root == null) {
            return ans;
        }

        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while (!queue.isEmpty()) {
            int size = queue.size();

            for (int i = 0; i < size; i++) {
                TreeNode node = queue.poll();
                if (i == size - 1) {
                    ans.add(node.val);
                }

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

        return ans;
    }

  

 

3. 总结

posted on 2023-04-25 13:54  白露~  阅读(12)  评论(0编辑  收藏  举报