Leetcode Minimum Absolute Difference in BST

题意: 找出一棵数中, 各结点之差绝对值的最小值。

思路:dfs遍历,排序后,比较相邻元素的之差绝对值的大小。

/**
 * 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> node;
    int getMinimumDifference(TreeNode* root) {
        dfs(root);
        std::sort(node.begin(), node.end());
        int dif = 99999999;
        for(int i = 1; i < node.size(); ++ i) {
            dif = min(dif, abs(node[i - 1] - node[i]));
        }
        
        return dif;
    }
    void dfs(TreeNode* root){
        if(!root) return;
        
        node.push_back(root->val);
        dfs(root->left);
        dfs(root->right);
        
        return;
    }
};

看了其他人的答案才发现这是一棵二叉搜索树,所以可以用中序遍历的方法直接得到排好序的数列。

/**
 * 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:
    int re = INT_MAX;
    int pre = -1;
    int getMinimumDifference(TreeNode* root) {
        in_dfs(root);
        
        return re;
    }
    
    void in_dfs(TreeNode* root) {
        if(root == NULL) return;
        
        in_dfs(root->left);
        if(pre >= 0) re = min(re, root->val - pre);
        pre = root->val;
        in_dfs(root->right);
        return;
    }
};


猜你喜欢

转载自blog.csdn.net/markpen/article/details/59407060