给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
示例:
输入:
1\3/2
输出:
1
解释:
最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。
提示:
树中至少有 2 个节点。
解题思路:
二叉搜索树中序遍历的性质:一棵二叉搜索树的中序遍历序列是一个非递减的有序序列。
代码如下:
/*** 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 {
public:int getMinimumDifference(TreeNode* root) {int pre = -1,ans = INT_MAX;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(ans,abs(root->val-pre));pre = root->val;}dfs(root->right,pre,ans);}
};