一、题目介绍
给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
示例:
输入:
1
\
3
/
2
输出:
1
解释:
最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。
提示:
树中至少有 2 个节点。
本题与 783 https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes/ 相同
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、解题思路
本题主要考察二叉搜索树中序遍历的特性,即遍历结果为一个升序序列。结合题目的问题,即为在一个升序数组中查找任意两个元素之前的最小绝对差,分析可知结果肯定在相邻的元素之间。详见代码。
三、解题代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int getMinimumDifference(TreeNode* root) {
//搜索二叉树的中序遍历为升序数组
//升序数组中寻找任意两个元素之间的最小差值,肯定在相邻元素之间
TreeNode* node = root;
stack<TreeNode*> st;
vector<int> nums;
while(!st.empty() || node)
{
while(node)
{
st.push(node);
node = node->left;
}
node = st.top();
st.pop();
nums.push_back(node->val);
node = node->right;
}
//计算最小差值
int minVal = INT_MAX;
for(int i = 1; i < nums.size(); ++i)
{
minVal = min(minVal, nums[i] - nums[i-1]);
}
return minVal;
}
};