当前位置: 首页 > news >正文

(LeetCode 面试经典 150 题 ) 637. 二叉树的层平均值(深度优先搜索dfs)

题目:637. 二叉树的层平均值

在这里插入图片描述
在这里插入图片描述
思路:深度优先搜索dfs,时间复杂度0(n)。

遍历所有节点,记录每一层的分布情况。

C++版本:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:// 每层节点值之和vector<double> ans;// 每层的节点数量vector<int> ct;void dfs(TreeNode* root,int d){if(root==nullptr) return;// 当前层遍历到的第一个节点if(ct.size()==d){ct.push_back(1);ans.push_back(root->val);}else{ans[d]+=root->val;ct[d]+=1;}dfs(root->left,d+1);dfs(root->right,d+1);}vector<double> averageOfLevels(TreeNode* root) {dfs(root,0);for(int i=0;i<ans.size();i++){ans[i]/=ct[i];}return ans;}
};

JAVA版本:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {List<Double> ans=new ArrayList<>();List<Integer> ct=new ArrayList<>();void dfs(TreeNode root,int d){if(root==null) return;if(ct.size()==d){ct.add(1);ans.add(root.val*1.0);}else{ans.put(d,root.val+ans.get(d));ct.put(d,1+ct.get(d));}dfs(root.left,d+1);dfs(root.right,d+1);}public List<Double> averageOfLevels(TreeNode root) {dfs(root,0);for(int i=0;i<ans.size();i++){ans[i]/=ct[i];}return ans;}
}

GO版本:

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
func averageOfLevels(root *TreeNode) []float64 {ans:=[]float64{}ct:=[]int{}dfs(root,0,&ans,&ct)for i:=0;i<len(ct);i++ {ans[i]/=float64(ct[i]);}return ans
}
func dfs(root *TreeNode,d int,ans *[]float64,ct *[]int){if root==nil {return}if len(*ct)==d {*ct=append(*ct,1)*ans=append(*ans,float64(root.Val))}else{(*ct)[d]+=1(*ans)[d]+=float64(root.Val)}dfs(root.Left,d+1,ans,ct)dfs(root.Right,d+1,ans,ct)
}
http://www.xdnf.cn/news/1375147.html

相关文章:

  • 亚马逊广告关键词排名提升的五大核心策略解析
  • java简单ssm(spring+springmvc+mybatis)框架结构demo
  • 大模型重构建筑“能耗基因“:企业如何用物联中台打响能源革命?
  • 手写MyBatis第36弹:MyBatis执行流程中SQL命令类型解析
  • 登录业务——密码重置与强制修改初始密码实现思路
  • 【微信小程序】分别解决H5的跨域代理问题 和小程序正常不需要代理问题
  • Coze用户账号设置修改用户名-后端源码
  • map|math
  • 腾讯位置商业授权微信小程序路线规划
  • 【开源工具】基于Flask与Socket.IO的跨平台屏幕监控系统实战(附完整源码)
  • 前端性能优化:从指标监控到全链路落地(2024最新实战指南)
  • 论文阅读:Gorilla: Large Language Model Connected with Massive APIs
  • 深度学习入门:神经网络基础知识
  • lesson47:Linux常用软件使用指南:远程连接、远程拷贝、Vim与Nginx
  • VESA时序检测模块设计verilog实现
  • Ubuntu 24 Server 如何设置无线网络
  • imx6ull-驱动开发篇45——Linux 下 SPI 驱动框架简介
  • d435i相机读取镜头内参和相对之间的外参
  • 艾体宝新闻 | 98%好评率!KnowBe4 连续5年蝉联第一,现开放免费钓鱼测试等你解锁
  • 内网应用如何实现外网访问?外地通过公网地址访问内网服务器的设置方法
  • 遗传算法:模拟自然选择的优化智慧
  • Spring Boot项目集成日志系统使用完整指南
  • 欧洲数字化养殖平台 Herdwatch 借力 Iceberg + StarRocks 提升分析能力
  • 嵌入式开发学习 C++:day01
  • 动态规划:硬币兑换(有趣)
  • LeetCode - 739. 每日温度
  • 线性回归原理推导与应用(十一):多重共线性
  • 获取服务器指标的信息
  • bin log 和 redo log有什么区别
  • Mybatis总结