199. 二叉树的右视图(中)

题目

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

python

题解:BFS

  • 用BFS,每一层最后一个弹出队列的元素加到结果列表里面
class Solution:
    def rightSideView(self, root: Optional[TreeNode]) -> List[int]:
        
        if not root:# 如果根节点为空,直接返回空列表
            return []
        res=[] # 存储结果的列表
        q=[]  # 使用列表作为队列
        q.append(root)# 将根节点加入队列
        res.append(root.val)# 将根节点的值加入结果列表
        #step=1# 记录当前层的编号
        while q:
            size=len(q)
            for _ in range(size):
                cur=q.pop(0) # 从队列头部取出节点
                if cur.left:
                    q.append(cur.left)# 将左子节点加入队列
                if cur.right:
                    q.append(cur.right)# 将右子节点加入队列
            if q:#确保叶子节点后面一层的空结点不被加入进来
                res.append(q[-1].val)# 将当前层最后一个节点的值加入结果列表
            #step+=1# 更新层编号
        return res

javascript

题解:层序遍历

  • 返回层序遍历的每一层的最后一个节点
var rightSideView = function(root) {
    //返回层序遍历的每一层的最后一个节点
    let res=[]//存储结果
    let queue=[root]
    if (root === null) return []
    
    while(queue.length>0){
        const n = queue.length
        for(let i=0;i<n;i++){
            //队列出队,拿到当前节点
            const cur_node = queue.shift()
            //如果是当前层的最后一个节点加入结果列表
            if (i=== n-1) res.push(cur_node.val)
            //当前节点的左孩子右孩子入队
            if(cur_node.left) queue.push(cur_node.left)
            if(cur_node.right) queue.push(cur_node.right)
        }
    }
    return res
};
posted @   Frommoon  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示