欢迎来到英杰社区:
https://bbs.csdn.net/topics/617804998
欢迎来到阿Q社区:
https://bbs.csdn.net/topics/617897397
📕作者简介:热爱跑步的恒川,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。
📗本文收录于恒川的日常汇报系列,大家有兴趣的可以看一看
📘相关专栏C语言初阶、C语言进阶系列、恒川等,大家有兴趣的可以看一看
📙Python零基础入门系列,Java入门篇系列、docker技术篇系列、Apollo的学习录系列正在发展中,喜欢Python、Java、docker的朋友们可以关注一下哦!
??知识改变命运,学习成就未来。时序更替,岁物丰成。回望来时路,我们已走过千山万水;展望新征程,曙光跃动在地平线上。在成长的道路上,不断充实自己,才能走得更远。大家好,我是恒川,目前是一名大二的学生,来csdn已经一年了,这篇博客不谈技术,回顾恒川 2023年 的编程之旅。
??每天坚持做一道力扣题目,目前已经坚持快200天了,最近准备搞一个力扣刷题专栏,刷力扣的小伙伴可以期待一下了。
百天勋章
??关注我的人都知道,我的仓库已经传了400+了,传仓库的好处我就不介绍了,这四百天的日日夜夜,现在仍在坚持。
??不知道大家背单词都用的什么app,我一开始先用的百词斩,后来同学都说不背单词这款软件效果更好,于是八月底我就忍痛割爱了百词斩。
??我来csdn一年多了,23年一共写了104篇博客,通过写博客获得了许多益处,不仅锻炼了自己的创作能力,而且还收获了许多志同道合的朋友们。
??在追求技术的同时,也要关注自己的身体和心理健康。确保有足够的休息和娱乐时间,保持平衡的生活。
??23年1月到4月,我系统的学习了C语言。
??期间ChatGPT和文心一言的爆火,让编程更加简单。
??23年5月到6月,我自学了python,并参加了新星计划。
??获得了实力新星奖的证书和赛道的top1。
6月我还学了些Java语言,并创建了专属于Java的专栏。
6月我的勤写标兵已经达到了四级
??7月我简单了解了docker,也创建了专属于docker的专栏,该专栏发了15篇内容,文章平均质量分 98,这是我的docker的专栏,欢迎大家订阅,后续持续更新。
七月份我还报名当了新星计划的导师,并带领60多人学习了Java
??8月我参加Apollo自动驾驶征文活动,并发布了一些文章,收获蛮大的。
??9月我参加了索尼的创意征文活动,与机器人进行了有趣的互动!
??10月我测评了ToDesk 、TeamViewer、AnyDesk远程控制软件稳定性。
??11月有点忙,只发了一些送书的文章。
??12月忙着学校的期末考试学校的课程,没怎么发博客。
粉丝量的进步
热榜第一上过N次
2023年新星计划导师双证书
文心一言使用权
坚果哥受邀西安大会
感谢胡老师的热情款待
钉钉阿里云
索尼征文获奖证书
??新的一年,大家是否已经准备好迎接新的挑战和机遇了呢?让我们一起立下新年Flag,为自己设定一些小目标,让我的2024更加精彩!
??2024年,我准备学习个新技术, 确定学习一门新的编程语言、框架或工具,并深入了解其特性和用途。并参与开源项目,贡献到开源项目是提高编程技能的好方法。你也可以选择一个感兴趣的项目,解决一些问题或者提出新的功能,这有助于你学习协作开发和提高代码质量的经验。
??2024年,我准备深入研究算法和数据结构,对算法和数据结构的深入了解有助于解决复杂的编程问题。制定计划,逐步学习和应用这些概念,提高解决问题的效率。
??2024年,我准备参与一些编程挑战,每周或每月参与一些编程挑战,例如LeetCode、牛客网等,蓝桥杯也在准备。想找一个自己感兴趣的项目,可能是一个应用、一个网站或者一个工具。通过这个项目,应用所学的知识,锻炼项目管理和开发的技能。并定期学习更新、订阅技术博客、参加技术会议、听取讲座等方式,保持对行业动态的了解,不断更新自己的知识。
??把二叉搜索树转换为累加树,我觉得这是2023年当中做的最有意思的题目。
??给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。
提醒一下,二叉搜索树满足下列约束条件:
递归函数参数以及返回值
这里很明确了,不需要递归函数的返回值做什么操作了,要遍历整棵树。
同时需要定义一个全局变量pre,用来保存cur节点的前一个节点的数值,定义为int型就可以了。
代码如下:
int pre = 0; // 记录前一个节点的数值
void traversal(TreeNode* cur)
确定终止条件
遇空就终止。
if (cur == NULL) return;
确定单层递归的逻辑
注意要右中左来遍历二叉树, 中节点的处理逻辑就是让cur的数值加上前一个节点的数值。
代码如下:
traversal(cur->right);
cur->val += pre;
pre = cur->val;
traversal(cur->left);
递归法整体代码如下:
class Solution {
private:
int pre = 0;
void traversal(TreeNode* cur) {
if (cur == NULL) return;
traversal(cur->right);
cur->val += pre;
pre = cur->val;
traversal(cur->left);
}
public:
TreeNode* convertBST(TreeNode* root) {
pre = 0;
traversal(root);
return root;
}
};
Java
递归
class Solution {
int sum;
public TreeNode convertBST(TreeNode root) {
sum = 0;
convertBST1(root);
return root;
}
public void convertBST1(TreeNode root) {
if (root == null) {
return;
}
convertBST1(root.right);
sum += root.val;
root.val = sum;
convertBST1(root.left);
}
}
迭代
class Solution {
public TreeNode convertBST(TreeNode root) {
int pre = 0;
Stack<TreeNode> stack = new Stack<>();
if(root == null) //edge case check
return null;
stack.add(root);
while(!stack.isEmpty()){
TreeNode curr = stack.peek();
if(curr != null){
stack.pop();
if(curr.left != null)
stack.add(curr.left);
stack.add(curr);
stack.add(null);
if(curr.right != null)
stack.add(curr.right);
}else{
stack.pop();
TreeNode temp = stack.pop();
temp.val += pre;
pre = temp.val;
}
}
return root;
}
}
??这一年,我们从平凡中看见风采,在奔忙中体现风格,在时光的斑驳里镌刻下熠熠生辉的印记。讲到这里,我的CSDN 年度总结终于画上了一个圆满的句号。知识改变命运,学习成就未来,感谢CSDN这个平台,让我可以和大家一起交流学习,共同进步,在这一年中,我不仅收获了粉丝量,也结交了许多志同道合的朋友们,也学到了很多知识。2024年我们都会变得更好,一起加油吧!