算法通关村:二叉树的右视图原来如此简单

题目:LeetCode199.二叉树的右视图

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

示例 1:
在这里插入图片描述

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

示例 2:
输入: [1,null,3]
输出: [1,3]

示例 3:
输入: []
输出: []

题目来源:LeetCode199.二叉树的右视图

题解

思路:层序遍历时记录每层的最后一个元素

在进行层序遍历时,用 size 来记录每层元素的个数,size 为 0 时说明这层元素已经遍历完,对于这题而言,层序遍历时每层的最后一个元素就是我们想要的,所以每层循环到 size - 1 时就需要将对应的元素保存起来。

示例过程如下所示:

节点 1 入队,此时 size = 1,说明第 1 层有 1 个元素
在这里插入图片描述

节点 1 出队后,其左孩子节点 2 和右孩子节点 3 入队,节点 1 为第 1 层的最后一个元素需要保存起来,下一轮的 size 变为 2,说明下一层有 2 个元素
在这里插入图片描述

节点 2 没有左孩子,节点 2 出队后,其右孩子节点 5 入队,而后 size 变为 1,说明第 2 层还剩一个元素,这个元素需要我们保存下来
在这里插入图片描述

节点 3 没有左孩子,节点 3 出队后,其右孩子节点 4 入队,节点 3 为 第 2 层的最后一个元素需要保存下来,下一轮的 size 变为 2,说明下一层有 2 个元素
在这里插入图片描述

节点 5 没有左右孩子,节点 5 出队后, size 变为 1,说明第 3 层还剩一个元素,这个元素需要我们保存下来
在这里插入图片描述

节点 4 没有左右孩子,节点 4 出队后,队列为空,结束遍历
在这里插入图片描述

代码:Java 实现

在 Java 中 LinkedList 是 Queue 的一个实现类

在这里插入图片描述

Queue 中部分方法如下所示:

方法参数返回说明
boolean offer(E e)e - 要添加的元素如果元素已添加到此队列返回 true,否则返回 false将指定元素入队
E poll()返回队列的头部元素,如果队列为空返回 null查看并删除队列的头部元素(元素出队)

使用树的层序遍历来解决二叉树的右视图问题的 Java 代码如下:

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;
}

总结

本文通过在二叉树的层序遍历时记录每层的最后一个元素解决了 LeetCode199.二叉树的右视图问题,解题的关键在于要能够想到利用树的层序遍历。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值