题目:
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
核心:
- 二叉搜索树
- 深度优先遍历
思路:
首先我们要了解二叉搜索树的特点:
- 左右子树也分别是二叉搜索树。
- 左子树的所有节点 key 值都小于它的根节点的 key 值。
- 右子树的所有节点 key 值都大于他的根节点的 key 值。
- 二叉搜索树可以为一棵空树。
所以对于二叉搜索树,使用深度优先搜索,每次找到的值,总是从最小的递增,最后找到最大的。这样我们就可以知道本题的意思。本题可以理解为在对于给出的二叉搜索树的一次遍历中,求出所有遍历过程中相邻两个节点值的最小差值。对于这道题的遍历,我们应该使用深度优先遍历,下面给出代码。
One Possible Answer:
void fun(struct TreeNode* root, int* max, int* pre) {
if (root == NULL) {
return;
}
fun(root->left, max, pre);
if (*pre == -1) {
*pre = root->val;
} else {
*max = *max < (root->val - *pre) ? *max : (root->val - *pre);
*pre = root->val;
}
fun(root->right, max, pre);
}
int minDiffInBST(struct TreeNode* root) {
int pre = -1, max = INT_MAX;
fun(root, &max, &pre);
return max;
}