开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第10天,点击查看活动详情
前言
算法的重要性不言而喻!区分度高!
现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。
说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!
提前入门学习书籍:CPrimerPlus、大话数据结构
刷题网站
我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以
刷题嘛,最重要的就是坚持了!!!
画图软件
OneNote
这个要经常用,遇见不懂的流程的话就拿它画一画!
笔记软件
Typoral
题目
解析
这题乍一看,没看懂什么意思。其实还是利用搜索二叉树的特性,中序遍历的结果是从小到大排序的。
但是我们没有必要把所有可能的结果都写出来,只需要去中序遍历然后计算两节点的差值即可!
递归三部曲
- 确定递归的参数和返回值
题目要求返回的结果是差值,所以返回值是int,然后参数自然是根节点了。
我们用题目给的函数即可
public int getMinimumDifference(TreeNode root) {}
- 确定递归终止的条件 当节点为空的话,差值就是0
if(root==null)return 0;
- 确定单层递归的逻辑
单层递归的话也是中序对把,只不过在到中序的时候我们进行一个计算,就是拿当前节点的值减去上一个节点的值就是我们得到的一个差值。
那怎么获取最小的差值呢?
我们拿Math类中的min方法即可
getMinimumDifference(root.left);
if(pre!=null){
result = Math.min(result,root.val-pre.val);
}
pre = root;
//右
getMinimumDifference(root.right);
一图胜千言
还是和上面一样,把代码写在一边,然后去手动模拟递归的变化就可以很轻松的明白题目的含义!
完整代码
class Solution {
TreeNode pre;// 记录上一个遍历的结点
int result = Integer.MAX_VALUE;
public int getMinimumDifference(TreeNode root) {
if(root==null)return 0;
getMinimumDifference(root.left);
if(pre!=null){
result = Math.min(result,root.val-pre.val);
}
pre = root;
//右
getMinimumDifference(root.right);
return result;
}
}