2021.2.19 刷题(搜索树的最小绝对差)

题目链接:https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/
题目描述:

方法一:
1.中序遍历二叉树,得到一个有序数组
2.遍历数组,比较两个相邻元素的差值,返回最小值

/**
 * 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> vec;
    void travle(TreeNode *root)
    {
        if(root == NULL) return;
        getMinimumDifference(root->left);
        vec.push_back(root->val);
        getMinimumDifference(root->right);
    }
    int getMinimumDifference(TreeNode* root) {
        travle(root);
        int result = INT_MAX;
        for(int i = 1; i < vec.size(); i++)
        {
            result = min(result, vec[i] - vec[i - 1]);
        }
        return result;
    }
};

方法二:在递归过程中记录前一个节点,不需要再增加额外的空间

/**
 * 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 result = INT_MAX; 
    TreeNode *pre;   //记录cur前一个节点
    void travle(TreeNode *cur)
    {
        if(cur == NULL) return;
        getMinimumDifference(cur->left);
        if(pre != NULL)
            result = min(result, cur->val - pre->val); //记录最小绝对差
        pre = cur; //更新节点
        getMinimumDifference(cur->right);
    }
    int getMinimumDifference(TreeNode* root) {
        travle(root);
        return result;
    }
};
原文地址:https://www.cnblogs.com/ZigHello/p/14417992.html