给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值。
示例:

注意:
二叉树的大小范围在 2 到 100。
二叉树总是有效的,每个节点的值都是整数,且不重复。
——————
解题思路:中序遍历得到的二叉搜索树的结果是按从小到大排序的,因此可以用中序遍历得到的结果计算相邻两位的最小差值就是我们想要的结果。因为使用递归算法,空间复杂度为O(m)O(m)O(m),m是树的深度。遍历n个结点,时间复杂度为O(n)O(n)O(n)。
/**
* 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 {
private:
int prev = NULL;
int ans = INT_MAX;
public:
int minDiffInBST(TreeNode* root) {
dfs(root);
return ans;
}
void dfs(TreeNode* root)
{
if(root==NULL)
return;
dfs(root->left);
if(prev != NULL)
ans = min(ans,(root->val-prev));
prev = root->val;
dfs(root->right);
}
};
本文介绍了一种算法,通过中序遍历二叉搜索树来找出任意两节点之间的最小差值。适用于树的大小在2到100之间,有效且不重复的整数值。采用递归方式实现,时间复杂度为O(n),空间复杂度为O(m),其中m为树的深度。
508

被折叠的 条评论
为什么被折叠?



