/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
vector<int>res;
public:
int findSecondMinimumValue(TreeNode* root) {
int pre=-1;
dfs(root,pre);
sort(res.begin(),res.end());
if(res.size()<2)
return -1;
else
return res[1];
}
void dfs(TreeNode* root,int pre){
if(!root)
return;
int ma=max(pre,root->val);
if(ma!=pre){
res.push_back(ma);
pre=ma;
}
dfs(root->left,pre);
dfs(root->right,pre);
}
};
class Solution {
int ans;
int rootvalue;
public:
int findSecondMinimumValue(TreeNode* root) {
ans = -1;
rootvalue = root->val;
dfs(root);
return ans;
}
void dfs(TreeNode* node) {
if (!node) {
return;
}
if (ans != -1 && node->val >= ans) {
return;
}
if (node->val > rootvalue) { //很巧妙,如果遇到更小的,val不会大于ans,然后又是比rootvalue大
ans = node->val;
}
dfs(node->left);
dfs(node->right);
}
};