Minimum Absolute Difference in BST

来源:互联网 发布:windows win7 ios系统 编辑:程序博客网 时间:2024/06/04 23:22

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

Example:

Input:

1
\
3
/
2

Output:
1

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

方法1: 对每个节点进行寻找。 前序遍历+寻找。

/** * 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 getMinimumDifference(TreeNode* root) {        TreeNode * cur ;        int left,right;        // left        cur = root -> left;        if(cur){            while(cur->right){                cur = cur->right;            }            left = abs(cur->val - root->val);        }        else            left = -1;        // right        cur = root -> right;        if(cur){            while(cur->left){                cur = cur->left;            }            right = abs(cur->val - root->val);        }        else            right = -1;        int min_diff ;        if(left == -1 || right == -1){            if(left==-1 && right ==-1)                min_diff = INT_MAX;            else                min_diff = (left==-1?right:left);        }        else{            min_diff = min(left,right);        }        if(root->left)            min_diff = min(min_diff,getMinimumDifference(root->left));        if(root->right)            min_diff = min(min_diff,getMinimumDifference(root->right));        return min_diff;    }};

方法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 {private:    void traverse(TreeNode *root,int& last,int& diff){            if(root->left)                traverse(root->left,last,diff);            if(last == -1)                last = root -> val;            else{                 diff = min(diff,abs(last - root->val));                 last = root -> val;            }            if(root->right)                traverse(root->right,last,diff);    }public:    int getMinimumDifference(TreeNode* root) {        int diff = INT_MAX,last = -1;        traverse(root,last,diff);        return diff;    }};
0 0
原创粉丝点击