其他分享
首页 > 其他分享> > Leetcode530+783

Leetcode530+783

作者:互联网

Leetcode530+783

题目

链接: 530.
链接: 783.
题目描述:给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
示例:
输入:root = [4,2,6,1,3]
输出:1

思路

二叉搜索树是自带排序的,进行一次中序遍历即可。
中序遍历通过深度搜索实现。
两道题不同之处仅仅在于530没有说明节点上限。

不足之处

初始写的时候考虑是把中序遍历的全部结果存下来再进行比较,会耗费过多的空间,实际上没必要。
直接通过深度搜索返回最近的两个节点指针并进行差值比较即可。

自己的代码

class Solution {
public:
    void dfs(TreeNode* r, int* a, int* iadd){	//深度搜索
        if(r->left != nullptr)
            dfs(r->left, a, iadd);
        a[*iadd] = r->val;
        *iadd = *iadd + 1;
        if(r->right != nullptr)
            dfs(r->right, a, iadd);
    }

    int minDiffInBST(TreeNode* root) {
        int a[100];
        int i = 0;
        int* iadd = &i;
        int min = 0;
        dfs(root, a, iadd);
        min = a[1] - a[0];
        for(int j = 1; j < i - 1; j++){
            if (min > (a[j + 1] - a[j]))
                min = a[j + 1] - a[j];
        }
        return min;
    }
};

官方代码

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 = 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;
    }
};
// 作者:LeetCode-Solution
// 链接:https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes/solution/er-cha-sou-suo-shu-jie-dian-zui-xiao-ju-8u87w/
// 来源:力扣(LeetCode)
// 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

新知识

c++中有min函数,比较两个传入的参数,返回较小值。

标签:pre,783,int,Leetcode530,dfs,ans,root,iadd
来源: https://blog.csdn.net/weixin_44265144/article/details/115673630