共计 1712 个字符,预计需要花费 5 分钟才能阅读完成。
Algorithm
LeetCode 145. Binary Tree Postorder Traversal
后序遍历二叉树
Given a binary tree, return the postorder traversal of its nodes’ values.
Example:
Input: [1,null,2,3]
1
\
2
/
3
Output: [3,2,1]Follow up: Recursive solution is trivial, could you do it iteratively?
迭代版本
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
Stack<TreeNode> s = new Stack<>();
TreeNode p = root;
// 记录上一次被访问的节点
TreeNode q = null;
do{
// 先找到最左下角的节点,记录沿途的位置
while(p!=null){
s.push(p);
p = p.left;
}
q = null;
while(!s.isEmpty()){
p = s.pop();
//BCA 的访问次序,如果上一次访问了 C,那么 A 就是该访问的节点
if(p.right == q){
result.add(p.val);
q = p;
}else{
// 二次进栈
s.push(p);
p = p.right;
break;
}
}
}while(!s.isEmpty());
return result;
}
}
Review
The Key To Accelerating Your Coding Skills 主题为提升编码技能的关键,首先提出获得解决问题的能力比开发一些应用更加重要。
指导阶段,3- 8 周,入门阶段啥都不懂
起步阶段的学生,最重要的是关注细节 根据错误信息调试很重要,随着经验增长,可以学会解读错误信息,抽取相关问题细节,从错误问题中学习经验,不要只是修复完就算了。刚开始可能需要问别人,后面可以 google 或者追踪代码。编程是终身学习的过程,有经验的工程师会为了解决未解决的问题而不断去学习,只等待是无用的。
大师失败的次数比菜鸟尝试的次数还要多得多!
进入下个阶段前,你有如下的特征:你见过了足够多的错误了,并且它们不再困扰着你你已经熟悉用 google 搜寻答案了你可以将你的代码遵循一定规则应用到其他的地方了
拐点阶段,2- 4 周,正确的思维方式
最令人困扰的阶段,根据指导,没有现成的方法解决你的问题困扰的原因是:编码速度比上个阶段慢了 10-20 倍剩余的日子,每天都要突破你的限制,不要待在舒适区
关于 web 开发,有两个转折点会一同到来不要做个 CRUD BOY,试试整合第三方的库学好数据结构和算法它们是编程王国的钥匙
招聘主管喜欢扎实基础的算法和开发工程师不要追寻热点技术,基础扎实学起来都快变得依赖自己,不要等着别人来帮助
写代码时候,想想之前是否写过类似的,可否借鉴视频吞掉了细节,查看 API 文档更加快速
尽可能有效的度过拐点阶段
指导阶段,做一些没有指导的任务尽可能少的使用指导文档假设你已经是度过拐点的开发者,适量阅读遵循 github 文档对你更有帮助重点关注重要且频繁使用的事情要明白这是困难的阶段,放轻松你自己如果你缺乏自信,找那些度过拐点的人聊聊,坚持学习,但不要太大负担,一天不要超过 6 小时,否则会加长这个阶段的时间。最好获取自信的方法是解决困惑你的问题,如果你挣扎了 15 个小时,那么之后就会平静下来如果 5 分钟或者 5 小时没思路,你会有困扰,但是你成功的次数多了,你的自信心会迅速增长
如何知道自己度过了拐点阶段
拐点度过之后是接受以下的事实:软件开发是持续的学习(还得学……)如果你觉得自己对所有都掌握了,那么应该解决更复杂的问题了
Tip
使用 VSCode 来开发 Java
Share
雾计算和边缘计算对物联网的意义何在?雾计算其响应更快,过滤信息,取决于网关灵活性,解决带宽瓶颈和延迟问题雾计算将一些处理和资源置于云的边缘,它不是为云存储和计算建立渠道,而是减少信息的发送降低对带宽的需求,再在某些接入点进行聚合。通过使用这种分布式策略,可以降低成本并提高效率。