zoukankan      html  css  js  c++  java
  • 刷题82——二叉树的右视图

    121.二叉树的右视图

    题目链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/binary-tree-right-side-view

    题目描述

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

    示例:

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

    1 <---
    /
    2 3 <---

    5 4 <---

    重难点

    广度优先遍历BFS

    题目分析

    1. 定义存放二叉树的队列str,记录进队出队的顺序,每当一个节点已经将孩子节点都纪录到队列时,将该节点从队列中移除;
    2. 定义存放二叉树最右边节点arr;
    3. 从二叉树右边看第一个节点,就是广度优先遍历的最后一个值;
    4. len用于纪录当前层节点的数量,当所有节点的孩子都被纪录时,则可以开始遍历下一层的节点了;
    5. 返回arr。
    /**
     * Definition for a binary tree node.
     * function TreeNode(val) {
     *     this.val = val;
     *     this.left = this.right = null;
     * }
     */
    /**
     * @param {TreeNode} root
     * @return {number[]}
     */
    var rightSideView = function(root) {
        if(!root) return [];
        //定义队列,用来放二叉树节点
        let str = [];
        str.push(root);
        //记录最右边的节点
        let arr = [];
        while(str.length){
            //将该层的第一个节点放入队列中
            arr.push(str[0].val);
            //节点数量
            let len = str.length;
            //遍历这一层的所有节点
            while(len--){
                 //遍历到的当前节点,将它的孩子节点放入队列中(下一层),并将该节点出队
                let lastNode = str.shift();
                //孩子节点从右往左依次进队
                if(lastNode.right) str.push(lastNode.right);
                if(lastNode.left) str.push(lastNode.left);
            }
        }
        return arr;
    };    
    

      

  • 相关阅读:
    solr不是标准的java project解决方案
    solr 索引库的维护
    solr linux配置
    JSON跨域问题总结
    阿里云字体图标的引用
    Android 体系结构
    java.lang.NoClassDefFoundError 异常
    java java.uitl.Random产生随机数
    Android 应用间的集成
    iOS7状态栏字体颜色修改
  • 原文地址:https://www.cnblogs.com/liu-xin1995/p/12749286.html
Copyright © 2011-2022 走看看