给定一个二叉搜索树的根结点 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);
}
};