题意: 找出一棵数中, 各结点之差绝对值的最小值。
思路: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;
}
};

本文介绍了一种算法,用于寻找二叉搜索树中任意两个节点值之间的最小差值。通过两次遍历方法实现:一次普通的DFS遍历加排序,另一次采用中序遍历直接获取有序节点值。
354

被折叠的 条评论
为什么被折叠?



