持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第26天,点击查看活动详情
前言
算法的重要性不言而喻!区分度高!
现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。
说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!
提前入门学习书籍:CPrimerPlus、大话数据结构
刷题网站
我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以
刷题嘛,最重要的就是坚持了!!!
画图软件
OneNote
这个要经常用,遇见不懂的流程的话就拿它画一画!
笔记软件
Typoral
题目
解析
遍历三部曲
还是熟悉的递归三部曲,每次遍历我们都要用到它,我们再写一遍
- 确定递归函数的参数和返回值
- 终止条件
- 确定单层递归的逻辑
什么是后序遍历呢?
如下图二叉树,前序遍历的顺序如下
后序遍历就是先遍历左节点,然后右节点最后是中间节点
如图所示:
二叉树的定义
再来回顾一下二叉树的定义
二叉树的定义一直是这样的,我们要写熟练了
还是因为面试的时候你要自己模拟二叉树,在leetcode里是直接二叉树就存在的所以我们不需要去模拟
现实我们还是要好好写的,这次我们一下就写了3遍,冲!!!!!!
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;
}
}
递归第一步:确定递归的参数和返回值
public void preorder(TreeNode root, List<Integer> result) {
确定终止条件
什么时候遍历停下来了呢?
那就是当前遍历的节点为空,那就终止遍历
if (root == null) {
return;
}
确定单层递归的逻辑
后续遍历当然是这样了
和前面两个遍历也是一样,就是更改遍历的顺序!
不懂的话还是和以前一样,画图就行!
preorder(root.left, result);
preorder(root.right, result);
result.add(root.val);
完整代码如下:
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<Integer>();
preorder(root, result);
return result;
}
public void preorder(TreeNode root, List<Integer> result) {
if (root == null) {
return;
}
preorder(root.left, result);
preorder(root.right, result);
result.add(root.val);
}
}
leetcode测试
总结
二叉树最常见的三种遍历方式我们都了解了,其实很相似但我们还是要多练才能给掌握,后面虽然还是这些但是经过变形之后就会难理解一点。现在我们能做的就是加深对这些遍历方式的理解。