给你一个二叉搜索树的根节点 root
,返回 树中任意两不同节点值之间的最小差值 。
注意:本题与 530:https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/ 相同
示例 1:
输入:root = [4,2,6,1,3]
输出:1
示例 2:
输入:root = [1,0,48,null,null,12,49]
输出:1
============================================================================================================================
二叉排序数:左子树<根结点<右结点
法一:按照二叉排序树的 性质,对其进行中序遍历,得到一个有序的序列,再在该序列中查出差值最小的。
/**
* 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:
//中序遍历
void order(vector<int>& res,TreeNode* root)
{
if(root == NULL)
{
return ;
}
order(res,root->left);
res.push_back(root->val);
order(res,root->right);
}
int minDiffInBST(TreeNode* root) {
vector<int> res;
//中序遍历
order(res,root);
int minData = INT_MAX;
for(int i=1;i<res.size();i++)
{
minData = min(minData,res[i]-res[i-1]);
}
return minData;
}
};
法二:直接一边遍历一边比较
/**
* 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 res = INT_MAX; //返回值
TreeNode* pre; //当前结点的前一个结点【父结点】
void order(TreeNode* cur)
{
if(cur == NULL)
{
return;
}
order(cur->left); //左
if(pre != NULL)
{
res = min(res,cur->val - pre->val);
}
//跟新pre
pre = cur;
order(cur->right); //右
}
int minDiffInBST(TreeNode* root) {
order(root);
return res;
}
};
链接:https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes