算法学习记录-二叉树的权值

算法学习记录

二叉树的权值

image-20230313112015916

真没想到想到,就这样一道题花了我一上午…

一开始思路比较乱,后来不停的开单步调试,不停的看各种值,不停的想思路和代码是不是一样的,调了一上午最后终于悟出来了.

刚开始的时候只是脑子里能想明白怎么求和, 但是不能写出具体流程就之间写代码了.

image-20230313112546060

后来错了半天才画出来个这个,然后思路清晰明了了.

刚开始的时候容易搞混各种索引用的下标, 起名字都是xyz很抽象,后边改成这样就好了,

一开始错了一个小时想不通挺难受的,后来给chatgpt看,虽然它不能帮我写出正确的代码,但是帮我改了点名字,再加上画出了图,最后想通了. 思路不清晰的时候调试很难受, 甚至不知道该看哪些, 状态很混沌.

思路

因为是完全二叉树, 显然容易知道怎么算每一层 ,有1,2,4,8,16这样的,每下一层就是上一层的乘以2

自己手算是用斜线隔开, 开始一个个求和来算, 每个隔开的是1,2,4,8,每次求和都要求1,2,4,8这种,

因为c语言不太好表示这种算的方法, 再多一层抽象,

每个斜杠后边开始加多少次是一组要标记的状态, 记到一个数组times[]里,

求和也是一组状态, 求出的和也加到另一个数组里, 这两个数组应该是等长的.

求和应该按照times[]里的次数来, 加购了指定的次数就开始按照下一个的次数加(指针+1)

然后是边界,比如7这种可以看成是log(4)+1,这样比log(7+1)的好处在于如果他有一颗树正好比第二颗数多一层,也不会收到影响.

额,其实完全把大脑里的算法写道程序里也不是那么容易, 有时候为了适应用的编程语言要再多一层抽象, 不过这个过程能让逻辑变的特别清晰, 也不错.

代码

#include <stdio.h>
//#include <stdlib.h>
#include <math.h>
//void debug_print(int x){
//    printf("%d\n",x);
//}int main(){int n;scanf("%d", &n);// 计算完全二叉树的深度int depth = (int)log2(n) + 1;
//    debug_print(depth);// 每一层加多少次int times[depth];int sum = 1;for (int i = 0; i < depth; i++) {times[i] = sum;sum *= 2;
//        debug_print(times[i]);}// 计算每一层节点的权值和int values[depth];for (int i = 0; i < depth; i++) {values[i] = 0;}int z_pointer=0,count=0;for (int i = 0; i < n; i++) {int val;if (scanf("%d", &val) != 1) {fprintf(stderr, "Error: invalid input format\n");return 1;}values[z_pointer] += val;if (count == times[z_pointer]) {count=0;z_pointer++;}else{count++;}}// 找出最大的权值和以及对应的深度int max = values[0];int min_depth = 0;for (int i = 1; i < depth; i++) {if (values[i] > max) {max = values[i];min_depth = i;}}// 输出结果printf("%d\n", min_depth + 1);return 0;
}

总结

虽然做的慢, 但还是想通了很多, 值. 而且这个算法复杂度在O(n), 效率很满意.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34158.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Java] 自己写图书馆管理系统(详细版)

目录 一、简介 二、需求 三、具体设计 一、大纲 二、分析过程 三、小结 1.整体流程 2.ListBookOrderByXXXCommand 3.匿名类对象语法知识点 4.类和对象&#xff08;面向对象设计&#xff09; 四、完整代码 一、简介 实现一个简单的能对图书馆的书籍进行简单管理的一个…

周易名:传统周易结合现代人工智能起名字

ChatGPT是由OpenAI公司开发的一种自然语言处理&#xff08;NLP&#xff09;模型&#xff0c;它是一种基于Transformer架构的深度学习模型。GPT的全称是Generative Pre-trained Transformer&#xff0c;也就是基于预训练的生成式Transformer模型。 ChatGPT被训练在大规模的文本…

【AIGC】人工智能的新篇章:生成式人工智能对企业的影响和意义

目录 人工智能的新篇章:生成式人工智能对企业的影响和意义

关于计算机网络的好坏处的英语作文,网购的好处和坏处英语作文带翻译

010在线为您甄选多篇描写网购的好处和坏处英语作文带翻译,网购的好处和坏处英语作文带翻译精选,网购的好处和坏处英语作文带翻译大全&#xff0c;有议论&#xff0c;叙事 &#xff0c;想象等形式。文章字数有400字、600字、800字....缓存时间&#xff1a; 2021-07-09 We talked…

计算机的利与弊英语作文带翻译,手机的利与弊带翻译英语作文(通用5篇)

手机的利与弊带翻译英语作文(通用5篇) 在学习、工作、生活中&#xff0c;许多人都有过写作文的经历&#xff0c;对作文都不陌生吧&#xff0c;借助作文人们可以实现文化交流的目的。为了让您在写作文时更加简单方便&#xff0c;下面是小编精心整理的手机的利与弊带翻译英语作文…

太厉害了,竟然用 Python 给英语老师开发了个英语作文批改的神器

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 原创&#xff1a;TrueDei 想要获取更多Python学习资料了解更多关于Python的知识可以加Q群630390733踊跃发言大家一起来学习讨论吧&#xff01; 由一个家长退群的故事在某…

基于Android的网上订餐系统

网上订餐系统大家肯定都不会陌生&#xff0c;那就废话不多说&#xff0c;直接上干货。 本人大二&#xff0c;刚好这学期需要做Android应用开发的大作业&#xff0c;今天也是刚刚做完演示&#xff0c;想着留着代码可能也不会有什么太大的用处了&#xff0c;就分享出来供大家参考…

完整的外卖系统,手机端 + 后台管理(附源码)

点击上方“逆锋起笔”&#xff0c;公众号回复 编程资源 领取大佬们推荐的学习资料flash-waimai 一个完整的外卖系统&#xff0c;包括手机端&#xff0c;后台管理&#xff0c;api基于spring boot和vue的前后端分离的外卖系统包含完整的手机端&#xff0c;后台管理功能本项目主要…

Android 外卖订餐APP开发

APP展示页面 &#xff1a; 本产品适用范围&#xff1a; 购买便利店系统任何版本&#xff0c;如需进行二次开发&#xff0c;需要单独联系我们队APP进行修改和调试&#xff0c;免收服务费用。本司接收任何定制功能&#xff0c;具体定制费用根据需求另付费。 2016全新生鲜外卖系统…

小程序外卖订单界面的 代码

html页面 . <view class"container"><view class"store-box"><view class"st-bg"></view><view class" flex justify-between store-info"><view class" flex flex-direction justify-start&…

网上订餐管理系统

网上订餐系统的主要功能是在线点餐&#xff0c;除此之外还有比如充值&#xff0c;菜谱管理&#xff0c;退餐&#xff0c;查看历史订单等等众多相关服务。在撰写论文的过程中&#xff0c;将结合理论实际&#xff0c;理清相关理论知识&#xff0c;同时与系统配合以解释实际应用和…

在线订餐管理系统

1、项目介绍 在线订餐管理系统拥有两种角色 管理员&#xff1a;菜品管理、类别管理、用户管理、订单管理、评价用户、留言管理等 用户&#xff1a;登录注册、点餐、购物车、历史订餐、留言 2、项目技术 后端框架&#xff1a; Servlet、mvc模式 前端技术&#xff1a;jsp、…

ChatGPT爆火?团餐行业如何实现智慧升级

最近&#xff0c;《流浪地球2》热映&#xff0c;影片科技感爆棚&#xff0c;画面感震撼&#xff0c;电影中的一些高科技智能设备也令人赞叹&#xff0c;空间站的云霄电梯可以直通空间站&#xff0c;酷炫的“外骨骼机器人能够辅助工程&#xff0c;智能电子狗“笨笨”能干又可爱&…

瑞吉外卖 - 后台系统退出功能(4)

某马瑞吉外卖单体架构项目完整开发文档&#xff0c;基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成&#xff0c;有需要的胖友记得一键三连&#xff0c;关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料&#xff1a;https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

外卖订餐——吃货联盟订餐系统

通过一段时间的学习&#xff0c;也到了检验成果的时候了&#xff0c;下面通过实战提升对技能点的运用能力、积累项目经验。 “吃货联盟定餐系统”需求说明 现今已进入网络时代&#xff0c;网上购物、看新闻、交友等人们的日常生活已离不开网络。“只 要点点手指&#xff0c;就…

基于android 订餐外卖APP,前台后台服务都齐全

基于android开发的订餐外卖APP 一 项目介绍 该项目是基于android开发的订餐外卖app&#xff0c;前台和后台管理都有&#xff0c;内容很多&#xff0c;非常值得学习&#xff0c;二次开发&#xff0c;设计指导性项目。 二 软件技术说明 软件架构说明 项目技术&#xff1a; …

瑞吉外卖-后台系统功能

目录 前言后台系统登录功能需求分析代码实现实体类Mapper层Service层Controller层 总结 后台系统退出功能需求分析代码实现总结 后台登录优化需求分析代码实现方法一&#xff1a;过滤器方法二&#xff1a;拦截器 总结 前言 所有的命名要符合开发规范&#xff0c;本项目中不再解…

【瑞吉外卖】day09:用户地址簿功能、菜品展示、购物车、下单

目录 1. 用户地址簿功能 1.1 需求分析 1.2 数据模型 1.3 导入功能代码 1.4 功能测试 2. 菜品展示 2.1 需求分析 2.2 前端页面分析 2.3 代码开发 2.4 功能测试 3. 购物车 3.1 需求分析 3.2 数据模型 3.3 前端页面分析 3.4 准备工作 3.5 代码开发 3.6 功能测试 …

外卖管理系统(一)

内容 软件开发整体介绍 瑞吉外卖项目介绍 开发环境搭建 后台登录功能开发 后台退出功能开发 1. 软件开发整体介绍 作为一名软件开发工程师,我们需要了解在软件开发过程中的开发流程&#xff0c; 以及软件开发过程中涉及到的岗位角色&#xff0c;角色的分工、职责&#x…

外卖订餐管理系统

需求分析 项目概述 外卖订餐系统分成前台订餐管理子系统、店家信息管理子系统和后台管理子系统这三个子系统。用户通过此平台可以浏览菜品、查询菜品、查询店家&#xff0c;注册登录后可以提交订单、查询订单、管理个人信息等&#xff1b;商家通过此平台注册登录后可以接单、…