/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int Traver(int value, struct TreeNode* root)
{
if (root == NULL)
{
return -1;
}
if (root->left == NULL || root->right == NULL)
{
return -1;
}
int lval = root->left->val;
if (lval == value)
{
lval = Traver(value,root->left);
}
int rval = root->right->val;
if (rval == value)
{
rval = Traver(value,root->right);
}
if ((lval > -1) && (rval > -1))
{
return lval > rval ? rval : lval;
}
if (lval == -1)
{
return rval;
}
return lval;
}
int findSecondMinimumValue(struct TreeNode* root){
return Traver(root->val,root);
}
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int findSecondMinimumValue(struct TreeNode* root){
if(!root || (!root->left && !root->right)) return -1;
int lval=-1,rval=-1;
if(root->left) lval=root->left->val;
if(root->right) rval=root->right->val; //初始化
if(lval==root->val) lval=findSecondMinimumValue(root->left);
if(rval==root->val) rval=findSecondMinimumValue(root->right); //相应子树存在,递归
if(lval!=-1 && rval!=-1) return (lval<rval)?lval:rval; //左右子树均存在第二小节点
if(lval==-1) return rval; //只有右子树有第二小节点
return lval; //只有左子树有第二小节点
}