描述
给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值。
The size of the BST will be between 2 and 100.
The BST is always valid, each node’s value is an integer, and each node’s value is different.
样例
Example 1:
Input: root = {2,1}
Output: 1
Explanation:
Note that root is a TreeNode object, not an array.
The given tree {2,1} is represented by the following diagram:
2
/
1
while the minimum difference in this tree is 1, it occurs between node 1 and node 2, also between node 3 and node 2.
Example 2:
Input: root = {4,2,6,1,3}
Output: 1
Explanation:
Note that root is a TreeNode object, not an array.
The given tree [4,2,6,1,3,null,null] is represented by the following diagram:
4
/ \
2 6
/ \
1 3
while the minimum difference in this tree is 1.
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param root: a Binary Search Tree (BST) with the root node
* @return: the minimum difference
*/
void minBST(TreeNode* root,vector<int> &resArray)//将所有节点存进resArray
{
if(root==nullptr)
return ;
int a=root->val;
resArray.push_back(a);
minBST(root->left,resArray);
minBST(root->right,resArray);
}
int minDiffInBST(TreeNode * root) {
// Write your code here.
if(root==nullptr)
return 0;
vector<int>array;
minBST(root,array);
int res=100000000;
for(int i=0;i<array.size();i++)//比较任意两个的差值,取最小的
{
for(int j=i+1;j<array.size();j++)
{
if (abs(array[i]-array[j])<res)
res=abs(array[i]-array[j]);
}
}
return res;
}
};