给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
示例 1:
输入:root = [4,2,6,1,3]
输出:1
示例 2:
输入:root = [1,0,48,null,null,12,49]
输出:1
提示:
树中节点数目在范围 [2, 100] 内
0 <= Node.val <= 105
差值是一个正数,其数值等于两值之差的绝对值
解题思路:
二叉搜索树中序遍历的性质:一棵二叉搜索树的中序遍历序列是一个非递减的有序序列。
代码如下:
/*** 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 minDiffInBST(TreeNode* root) {int ans = INT_MAX,pre = -1;dfs(root,pre,ans);return ans;}void dfs(TreeNode *root,int &pre,int &ans){if (root==nullptr) return ;dfs(root->left,pre,ans);if (pre==-1){pre = root->val;}else {ans = min(root->val-pre,ans);pre = root->val;}dfs(root->right,pre,ans);}
};