LeetCode

来源:互联网 发布:淘宝店铺音乐怎么添加 编辑:程序博客网 时间:2024/06/06 01:12

问题 easy

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

Example:

Input:   1    \     3    /   2Output:1Explanation:The minimum absolute difference is 1, which is the difference between 2 and 1 (or between 2 and 3).

Note: There are at least two nodes in this BST.

代码

/** * 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 {    int min_dif = INT_MAX, val = -1;public:    // 方法一:迭代法、中序遍历    int getMinimumDifference(TreeNode* root) {        int min, previous;        int flag = 0;        stack<TreeNode*> stack;        while(root || !stack.empty())        {            while(root)            {                stack.push(root);                root = root->left;            }            root = stack.top();            stack.pop();            if(flag == 0)            {                previous = root->val;                flag ++;            }            else if(flag == 1)            {                min = root->val - previous;                previous = root->val;                flag ++;            }            else            {                min = (min < root->val - previous) ? min : root->val - previous;                previous = root->val;            }            root = root->right;        }        return min;    }    //方法二:递归法    void inorderTraverse(TreeNode* root, int& val, int& min_dif) {        if (root->left != NULL) inorderTraverse(root->left, val, min_dif);        if (val >= 0) min_dif = min(min_dif, root->val - val);        val = root->val;        if (root->right != NULL) inorderTraverse(root->right, val, min_dif);    }    int getMinimumDifference(TreeNode* root) {        auto min_dif = INT_MAX, val = -1;        inorderTraverse(root, val, min_dif);        return min_dif;    }    //方法三:递归法2,需要额外定义私有成员数据    int getMinimumDifference(TreeNode* root) {        if (root->left != NULL) getMinimumDifference(root->left);        if (val >= 0) min_dif = min(min_dif, root->val - val);        val = root->val;        if (root->right != NULL) getMinimumDifference(root->right);        return min_dif;    }};
原创粉丝点击