![## 思路](https://i-blog.csdnimg.cn/blog_migrate/72a2334a9f7568d1a25c097f23c155b2.png)
原题链接
- 需要注意在定义result的时候, result 的值为 Integer.MAX_VALUE,不要误写为Math.MAX_VALUE
- 使用中序遍历可以按照从小到大的顺序来操作
- 关于递归的使用:在写了截止条件后,写关于细节处的处理,可以具体到最小的位置,看看如何写。
- traversal函数是void类型的,在写return的时候,不要写为return null,这样是错的,要直接写成 return; 即可
- 二刷:对中间位置处理,此处的逻辑:先对左节点进行处理,统计了其任意两节点之差,然后开始对中间节点进行处理。根据递归的思想,pre 代表着上一层的节点数据,即当前root的left节点,因为是儿茶搜索树,所以,一定是root的值大于pre的值
class Solution {
TreeNode pre;
int result = Integer.MAX_VALUE;
public int getMinimumDifference(TreeNode root) {
if(root == null) return 0;
traversal(root);
return result;
}
public void traversal(TreeNode root){
if(root == null) return;
traversal(root.left);
if(pre != null){
result = Math.min(result, root.val - pre.val);
}
pre = root;
traversal(root.right);
}
}