783. Minimum Distance Between BST Nodes
思路:
是二叉搜索树,那么就中序遍历吧,这样就能不用求绝对值。
需要写一个void函数,如果用原函数要返回int,会影响取最小值,且传入参数要用引用。
我们定义一个存储当前最小值res和上一个节点的值的变量pre,分别初始化为INT_MAX和-1.
然后传入root,res,pre,首先判断pre是否为-1,如果为-1说明还没有前一个节点,那么就先让pre=root->val,此时是在最左侧的叶子节点,然后返回到父子节点,那么pre就不再为-1了,此时判断 res和root->val减去pre谁更小,然后取最小值,再将pre=root->val即可。因为是搜索树是所以右节点大于父节点,所以pre的轨迹为left-mid-right,符合二叉树大小排序,就不用取绝对值。最后再调用函数搜索右子树即可。
代码:
/**
* 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:
void dfs(TreeNode* root,int& res,int& pre){
if(root==nullptr) return;
dfs(root->left,res,pre);
if(pre==-1) pre=root->val;
else{
res = min(res,root->val-pre);
pre=root->val;
}
dfs(root->right,res,pre);
}
int minDiffInBST(TreeNode* root) {
int res=INT_MAX,pre=-1;
dfs(root,res,pre);
return res;
}
};