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