题目描述
给定一个二叉搜索树的根节点 root,返回树中任意两节点的差的最小值。
C++
思路,将最小值设为成员变量,因为是二叉搜索树,所以其中序遍历刚好是升序,在递归过程中记录相邻值得差值,求最小就好。
/**
* 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) {}
* };
*/
/*
BST的中序遍历结果为节点值升序结果,所以最小距离为升序结果相邻两数的差,所以可以在递归生成中序遍历时求最小差值,从结果集中有两个节点结果时开始计算,求出最小值
递归:
停止条件:节点为空
返回什么: 只是遍历,什么也不用返回
本级递归干什么:中序遍历,并且求相邻节点得差值,记录最小差值,
*/
class Solution {
public:
int this_min=INT_MAX;
int pre=INT_MAX; //记录升序求差值得前一个值
int minDiffInBST(TreeNode* root) {
if(!root) return INT_MAX;
dfs(root);
return this_min;
}
void dfs(TreeNode* root){
if(!root) return;
dfs(root->left);
this_min=min(this_min,abs(root->val-pre));
pre=root->val;
dfs(root->right);
}
};