给定一个非空的特别的结点包含非负值二叉树,其中树中的每一个节点包含正好两个
或者零个
子结点。如果这个结点有两个子结点,那么这个结点的值不大于它的两个子结点。
对于这样一个二叉树,你需要输出由整个树当中的结点值构成的集合中的次小值。
如果不存在这样的一个次小值,输入-1作为替代。
样例
样例1:
输入:
2
/ \
2 5
/ \
5 7
输出: 5
解释: 最小的值是2,次小值是5.
样例2:
输入:
2
/ \
2 2
输出: -1
解释: 最小值是2,但是没有次小值.
输入测试数据 (每行一个参数)如何理解测试数据?
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
void myprint(int& x)
{
cout<<x<<" ";
}
class Solution {
public:
/**
* @param root: the root
* @return: the second minimum value in the set made of all the nodes' value in the whole tree
*/
vector<int> ret;
int findSecondMinimumValue(TreeNode * root)
{
// Write your code here
bianli(root);
sort(ret.begin(), ret.end());
for_each(ret.begin(), ret.end(), myprint);
for(int i = 1; i < ret.size(); i++)
{
if(ret[i] > ret[0])
{
return ret[i];
}
}
return -1;
}
void bianli(TreeNode * root)
{
if(root != NULL)
{
ret.push_back(root->val);
bianli(root->left);
bianli(root->right);
}
}
};