LeetCode 530. Minimum Absolute Difference in BST 解题报告

LeetCode 530. Minimum Absolute Difference in BST 解题报告

题目描述

Given a binary search tree with non-negative values, find the minimum absolute difference between values of any two nodes.


示例

LeetCode 530. Minimum Absolute Difference in BST 解题报告_第1张图片


注意事项

There are at least two nodes in this BST.


解题思路

我的思路:

这道题是LeetCode Weekly Contest 21的第一道题目,题目是求BST中最小的绝对值之差,并不是求最小的两个节点的绝对值之差。一开始我搞错了问题,所以wrong了一次。。。。
题目难度是easy,很简单的一种解法就是利用BST的性质:中序遍历BST得到的序列是有序序列。因此创建一个vector存储中序遍历的每一个节点就得到一个有序序列,然后遍历这个有序序列,在遍历过程中求出两两之差并更新最小的绝对值之差就能得到结果。


代码

我的代码

/**
 * 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:
    vector<int> nodes;
    int minValue = 2147483647;

    void dfs(TreeNode *root) {
        if (!root)
            return ;

        if (root->left)
            dfs(root->left);

        nodes.push_back(root->val);

        if (root->right)
            dfs(root->right);

    }

    int getMinimumDifference(TreeNode* root) {
        nodes.clear();
        minValue = 2147483647;

        dfs(root);

        for (int i = 1; i < nodes.size(); i++)
            if (nodes[i] - nodes[i - 1] < minValue)
                minValue = nodes[i] - nodes[i - 1];

        return minValue;
    }
};

总结

这道题考查的是BST,只要知道了中序遍历BST得到的是有序序列就能很容易地想出解决办法,当然这道题肯定会有更快速的解法,如果以后想出来会补充上去。
在LeetCode Weekly Contest 21中只做出了前两道题,所以还会有第二篇博客,感觉自己还得多加修炼,提高自己的解题能力,加油,继续填坑!

你可能感兴趣的:(编程解题)