Leetcode580
链接:力扣 。
题目:
给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
说明:树中至少有 2 个节点。
示例1:
输入:root = [4,2,6,1,3]
输出:1
示例2:
输入:root = [1,0,48,null,null,12,49]
输出:1
思路:
题目中要求在二叉搜索树上任意两节点的差的绝对值的最小值。注意是二叉搜索树,二叉搜索树可是有序的。
遇到在二叉搜索树上求什么最值啊,差值之类的,就把它想成在一个有序数组上求最值,求差值,这样就简单多了。
BST的中序遍历实际上就是访问这个“有序数组的过程”,因此我们只需中序遍历一遍BST然后逐个计算差值找到最小值即可。
参考代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int result = INT32_MAX;
void traversal(TreeNode* root, TreeNode* &pre) {
if (root == nullptr) {
return;
}
traversal(root->left, pre);
if (pre != nullptr) {
result = min(result, root->val - pre->val);
}
pre = root;
traversal(root->right, pre);
}
int getMinimumDifference(TreeNode* root) {
TreeNode *pre = nullptr;
traversal(root, pre);
return result;
}
};
版权声明:本文为jgsecurity原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。