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;
    }
};
posted @ 2021-04-13 13:45  Mrsdwang  阅读(26)  评论(0编辑  收藏  举报