[LeetCode]530. Minimum Absolute Difference in BST
题目描述
思路
深搜
递归方式
固定最大右值的同时,不断更新当前值和左值
固定最小左值的同时,不断更新当前值和右值
计算差值同时维护一个最小值。
代码
#include <iostream>
#include <algorithm>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x): val(x), left(NULL), right(NULL){}
};
class Solution {
public:
int getMinimumDifference(TreeNode* root) {
int res = INT_MAX;
dfs(root, NULL, NULL, res);
return res;
}
private:
void dfs(TreeNode*root, TreeNode* minLeft, TreeNode* maxRight, int& res) {
if (root == NULL)
return;
dfs(root->left, minLeft, root, res);
dfs(root->right, root, maxRight, res);
if (minLeft)
res = min(res, root->val - minLeft->val);
if (maxRight)
res = min(res, maxRight->val - root->val);
}
};
int main() {
TreeNode* node1 = new TreeNode(236);
TreeNode* node2 = new TreeNode(104);
TreeNode* node3 = new TreeNode(701);
TreeNode* node4 = new TreeNode(227);
TreeNode* node5 = new TreeNode(911);
node1->left = node2;
node1->right = node3;
node2->right = node4;
node3->right = node5;
Solution s;
cout << s.getMinimumDifference(node1) << endl;
system("pause");
return 0;
}