给你一个二叉搜索树的根节点 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
提示:
树中节点数目在范围 [2, 100] 内
0 <= Node.val <= 105
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
搜索二叉树,这个名词一出来就能想到中序遍历,因为中序遍历是递增的,中序遍历实现可以用深度优先,先一直往左下,再往右下走,不断比较两个节点之间差的最小值与ans相比谁更小,更新ans,代码如下:
/**
* 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:
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
ans = min(ans, root -> val - pre);
pre = root -> val;
}
// 继续中序遍历,往右下走
dfs(root -> right, pre, ans);
}
int minDiffInBST(TreeNode* root) {
int ans = INT_MAX, pre = -1;
dfs(root, pre, ans);
return ans;
}
};
/*作者:heroding
链接:https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes/solution/czhong-xu-bian-li-by-heroding-7x76/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。*/