本文主要是介绍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.
示例:
nput:1\3/2Output: 1Explanation: The minimum absolute difference is 1, which is the difference between 2 and 1 (or between 2 and 3).问题分析:
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 {
public:int getMinimumDifference(TreeNode* root) {if(root == NULL) return INT_MAX;TreeNode *right = findRight(root->left);TreeNode *left = findLeft(root->right);if(right != NULL && left != NULL){int m1 = min(abs(root->val - right->val),abs(root->val - left->val));int m2 = min(getMinimumDifference(root->left),getMinimumDifference(root->right));return min(m1,m2); }else if(right != NULL){int m1 = abs(root->val - right->val);int m2 = getMinimumDifference(root->left);return min(m1,m2);}else if(left != NULL){int m1 = abs(root->val - left->val);int m2 = getMinimumDifference(root->right);return min(m1,m2);}else{return INT_MAX;}}TreeNode * findRight(TreeNode* root){if(root == NULL) return NULL;while(root->right != NULL) root = root->right;return root; }TreeNode * findLeft(TreeNode* root){if(root == NULL) return NULL;while(root->left != NULL) root = root->left;return root; }
};
这篇关于Minimum Absolute Difference in BST问题及解法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!