Given a binary search tree with non-negative values, find the minimum absolute difference between values of any two nodes.
Note: There are at least two nodes in this 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 {
int min_dif = INT_MAX, val = -1;
public:
int getMinimumDifference(TreeNode* root) {
//先求左子树最小差值
if (root->left != NULL) getMinimumDifference(root->left);
if (val >= 0) min_dif = min(min_dif, root->val - val);
//记录当前根节点值
val = root->val;
if (root->right != NULL) getMinimumDifference(root->right);
return min_dif;
}
};