Given a binary search tree with non-negative values, find the minimum absolute difference between values of any two nodes.
There are at least two nodes in this BST.
这道题是LeetCode Weekly Contest 21的第一道题目,题目是求BST中最小的绝对值之差,并不是求最小的两个节点的绝对值之差。一开始我搞错了问题,所以wrong了一次。。。。
题目难度是easy,很简单的一种解法就是利用BST的性质:中序遍历BST得到的序列是有序序列。因此创建一个vector存储中序遍历的每一个节点就得到一个有序序列,然后遍历这个有序序列,在遍历过程中求出两两之差并更新最小的绝对值之差就能得到结果。
/**
* 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> nodes;
int minValue = 2147483647;
void dfs(TreeNode *root) {
if (!root)
return ;
if (root->left)
dfs(root->left);
nodes.push_back(root->val);
if (root->right)
dfs(root->right);
}
int getMinimumDifference(TreeNode* root) {
nodes.clear();
minValue = 2147483647;
dfs(root);
for (int i = 1; i < nodes.size(); i++)
if (nodes[i] - nodes[i - 1] < minValue)
minValue = nodes[i] - nodes[i - 1];
return minValue;
}
};
这道题考查的是BST,只要知道了中序遍历BST得到的是有序序列就能很容易地想出解决办法,当然这道题肯定会有更快速的解法,如果以后想出来会补充上去。
在LeetCode Weekly Contest 21中只做出了前两道题,所以还会有第二篇博客,感觉自己还得多加修炼,提高自己的解题能力,加油,继续填坑!