JS算法-二叉树的右视图

简介: JS算法-二叉树的右视图

题目


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

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


题解


第一种


首先判断根节点是否为 null,如果是,则直接返回空数组,接下来我们定义两个数组 arr 和 ans,其中 arr 用于存放当前层的节点,ans 用于存放右视图节点的值,然后将根节点压入 arr 数组,并将根节点的值压入 ans 数组,接下来进入 while 循环,判断 arr 数组是否为空,如果不为空,则去获取当前层的节点数 currLen,然后去遍历 arr 数组中的 currLen 个节点,依次弹出节点并进行判断当前节点是否有左子节点,有则将其左子节点压入 arr 数组,在判断当前节点是否有右子节点,有则将其右子节点压入 arr 数组,然后判断 arr 数组最后一个节点是否为空,如果不为空,则将其值压入 ans 数组,当循环结束后,将 ans 数组返回出去即可

function rightSideView(root) {
  if (root == null) {
    return []
  }
  let arr = [], ans = []
  arr.push(root)
  ans.push(root.val)
  while (arr.length) {
    let currLen = arr.length
    for (let i = 0; i < currLen; i++) {
      let node = arr.shift()
      node.left && arr.push(node.left)
      node.right && arr.push(node.right)
    }
    arr[arr.length - 1] != null ? ans.push(arr[arr.length - 1].val) : ''
  }
  return ans
};


第二种


我们先定义一个空数组res,用于记录右视图节点的值,然后在定义一个名为dfs的函数,用于递归遍历二叉树。该函数接受两个参数:当前节点root和当前节点所在的深度depth,如果当前节点为空,则返回,如果res数组的长度等于当前节点的深度,说明该深度的节点还没有被记录到右视图中,因此将当前节点的值添加到res数组中,接下来增加深度depth的值,然后递归遍历当前节点的右子树和左子树,然后调用dfs函数,以二叉树的根节点和深度0作为参数,然后返回res数组,即为二叉树的右视图节点值的集合

var rightSideView = function (root) {
  const res = [];
  const dfs = (root, depth) => {
    if (root === null) {
      return;
    }
    if (res.length === depth) {
      res.push(root.val);
    }
    depth++;
    dfs(root.right, depth);
    dfs(root.left, depth);
  }
  dfs(root, 0);
  return res;
};
相关文章
|
2月前
|
存储 算法
【数据结构与算法】二叉树基础OJ--下(巩固提高)
【数据结构与算法】二叉树基础OJ--下(巩固提高)
|
2月前
|
算法 Java
算法:Java计算二叉树从根节点到叶子结点的最大路径和
算法:Java计算二叉树从根节点到叶子结点的最大路径和
|
27天前
|
算法
【算法与数据结构】二叉树(前中后)序遍历1
【算法与数据结构】二叉树(前中后)序遍历
|
3月前
|
算法 JavaScript 前端开发
彩票中奖率的真相:用 JavaScript 看透彩票背后的随机算法(下)
至于分发?我们可以参考一下市面上已有的一些概念做一下对比,下面是笼统的一个网络服务器的TPS预估值,也就是说彩票服务器在1秒内可以处理的最大请求数:
|
3月前
|
数据采集 算法 JavaScript
彩票中奖率的真相:用 JavaScript 看透彩票背后的随机算法(上)
原本这篇文章是打算叫「假如我是彩票系统开发者」,但细想一下,如果在文章中引用太多的 JavaScript 的话,反而不是那么纯粹,毕竟也只是我的一厢情愿,彩票开发也不全如本文所讲,有所误导的话便也是得不偿失了。
|
27天前
|
算法
【算法与数据结构】二叉树(前中后)序遍历2
【算法与数据结构】二叉树(前中后)序遍历
|
18天前
|
算法
算法系列--递归(2)--二叉树专题(上)
算法系列--递归(2)--二叉树专题
24 0
|
13天前
|
算法 DataX
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
|
18天前
|
算法
算法系列--递归(2)--二叉树专题(下)
算法系列--递归(2)--二叉树专题(下)
20 0
|
23天前
|
算法 索引
【算法与数据结构】深入二叉树实现超详解(全源码优化)
【算法与数据结构】深入二叉树实现超详解(全源码优化)