一天一大 lee(二叉树的层平均值)难度:简单-Day20200912
时间:2022-07-25
本文章向大家介绍一天一大 lee(二叉树的层平均值)难度:简单-Day20200912,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目:
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。
示例:
输入:
3
/
9 20
/
15 7
输出:[3, 14.5, 11]
解释:
第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。
提示:
- 节点值的范围在32位有符号整数范围内。
抛砖引玉
抛砖引玉
广度优先搜索(BFS)
从根节点开始遍历,遍历一个元素就将其从queue中取出,将其下一层放入queue中待下次遍历
每一层遍历均记录子元素的和,且求平均值(该地方好像有个隐患,求平均值未设置保留整数或者多少小数位,可能会有js的精度问题)到结果数组中
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number[]}
*/
var averageOfLevels = function(root) {
let _result = [],
queue = [];
if (root == null) return [];
queue.push(root);
while (queue.length) {
let len = queue.length,
levelSum = 0;
for (let i = 0; i < len; i++) {
let node = queue.shift();
levelSum = levelSum+node.val;
if (node.left) {
queue.push(node.left);
}
if (node.right) {
queue.push(node.right);
}
}
_result.push(levelSum/len);
}
return _result;
};
因为本题要求层的平均值,刚好广度优先搜索的逻辑也是一层层搜索,所以BFS一定是最先想到的,
回看day-04: 二叉树的所有路径 (难度:简单),会想起来遍历二叉树除了BFS还有DFS,那么下面尝试下DFS(深度优先搜索)
深度优先搜索(DFS)
思路
- 在每层递归时记录当前处理的层数
- 遇到相同层数的节点累加到同层中,统计累计个数+1
- 最终按层计算平均值
var binaryTreePaths = function (root) {
let _result = [],
map = new Map() // 记录个数
function dfs(node, level) {
if (!node) return
map.set(level,(map.get(level) || 0) + 1)
_result[level] = (_result[level] || 0) + node.val
dfs(node.left, level+1)
dfs(node.right, level+1)
}
dfs(root, 0);
// 求平均值
for(let i =0;i<_result.length;i++){
_result[i] = _result[i]/map.get(i)
}
return _result
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- R语言用于线性回归的稳健方差估计
- 用SAS进行泊松,零膨胀泊松和有限混合Poisson模型分析
- 东芝开发板驱动OLED模块显示LOGO图片
- sas文本挖掘案例:如何使用SAS计算Word Mover的距离
- R语言ggplot2 对Facebook用户数据可视化分析
- 如何实现一个圆弧倒计时进度条
- R语言Kaggle泰坦尼克号性别阶级模型数据分析案例
- 以图搜图系统概述
- GitHub Pages 配置 letsencrypt 开启HTTPS
- R语言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用于预测时间序列数据
- 以图搜图系统工程实践
- R语言线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)
- 用R语言实现神经网络预测股票实例
- R语言社区主题检测算法应用案例
- C++ vector学习笔记