/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
* Link: https://leetcode-cn.com/problems/second-minimum-node-in-a-binary-tree/comments/
*/
class Solution {
long secondMinVal = LONG_MAX;
bool isRoot = true;
int rootVal;
public:
int findSecondMinimumValue(TreeNode* root) {
if (root == NULL) {
return -1;
}
if (isRoot) {
isRoot = false;
rootVal = root->val;
}
/* root valuesecondMinVal */
if ((long)root->val > rootVal && (long)root->val < secondMinVal) {
secondMinVal = (long)root->val;
}
findSecondMinimumValue(root->left);
findSecondMinimumValue(root->right);
return secondMinVal != LONG_MAX ? secondMinVal : -1;
}
};