给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2
或 0
。如果一个节点有两个子节点的话,那么这个节点的值不大于它的子节点的值。
给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。
示例 1:
输入: 2 / \ 2 5 / \ 5 7 输出: 5 说明: 最小的值是 2 ,第二小的值是 5 。
示例 2:
输入: 2 / \ 2 2 输出: -1 说明: 最小的值是 2, 但是不存在第二小的值。
C++
/**
* 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:
void DFS(TreeNode* node, vector<int>& tmp)
{
if(node)
{
tmp.push_back(node->val);
DFS(node->left,tmp);
DFS(node->right,tmp);
}
}
int findSecondMinimumValue(TreeNode* root)
{
vector<int> tmp;
DFS(root->left,tmp);
DFS(root->right,tmp);
sort(tmp.begin(),tmp.end());
int res=-1;
if(tmp.size())
{
for(int i=0;i<tmp.size();i++)
{
if(tmp[i]>root->val)
{
res=tmp[i];
break;
}
}
}
return res;
}
};