题意: 找出一棵数中, 各结点之差绝对值的最小值。
思路:dfs遍历,排序后,比较相邻元素的之差绝对值的大小。
/**
* 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> node;
int getMinimumDifference(TreeNode* root) {
dfs(root);
std::sort(node.begin(), node.end());
int dif = 99999999;
for(int i = 1; i < node.size(); ++ i) {
dif = min(dif, abs(node[i - 1] - node[i]));
}
return dif;
}
void dfs(TreeNode* root){
if(!root) return;
node.push_back(root->val);
dfs(root->left);
dfs(root->right);
return;
}
};
看了其他人的答案才发现这是一棵二叉搜索树,所以可以用中序遍历的方法直接得到排好序的数列。
/**
* 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 re = INT_MAX;
int pre = -1;
int getMinimumDifference(TreeNode* root) {
in_dfs(root);
return re;
}
void in_dfs(TreeNode* root) {
if(root == NULL) return;
in_dfs(root->left);
if(pre >= 0) re = min(re, root->val - pre);
pre = root->val;
in_dfs(root->right);
return;
}
};