题目描述:给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。
代码:
class Solution {
public:
int findSecondMinimumValue(TreeNode* root) {
if(!root||!root->left||!root->right) return -1;
int left=root->left->val,right=root->right->val;
if(root->val==root->left->val)
left=findSecondMinimumValue(root->left);
if(root->val==root->right->val)
right=findSecondMinimumValue(root->right);
if(root->val==left&&root->val==right) return -1;
int min_lr=min(left,right);
if(root->val<min_lr) return min_lr;
else return max(left,right);
}
};