题目
给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
示例:
输入:
1
\
3
/
2
输出:
1
解释:
最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。
题解
从题目中可以获得以下几条信息:
- 二叉树,且为二叉搜索树,根据二叉搜索树的定义可知二叉树有序
- 节点为非负值
解题思路
中序遍历方法
首先我们先分析另外一个问题,如何求一个数组中任意两个元素的差的绝对值的最小值。最简单的 做法就是两层循环遍历数组,计算任意两个元素的差找到最小值。那如果数组有序(升序)呢?是不是绝对值最小的两个元素一定是相邻的两个元素差的绝对值呀。这时候我们只需要遍历一遍数组,计算相邻两个元素差的绝对值即可。
有了上面的问题的思路,接下来看下该问题,我们知道,该树是二叉树,且为二叉搜索树,既然是树,肯定要遍历才能知道树的每个节点的值,又因为是二叉搜索树,那么中序遍历的结果就是有序的且为升序。因此我们可以对该二叉搜索树进行中序遍历,将遍历的节点值存储到一个数组中,之后再按照上面的思路求出最小值即可。此时的时间复杂度