给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2
或 0
。如果一个节点有两个子节点的话,那么这个节点的值不大于它的子节点的值。
给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。
示例 1:
输入: 2 / 2 5 / 5 7 输出: 5 说明: 最小的值是 2 ,第二小的值是 5 。
示例 2:
输入: 2 / 2 2 输出: -1 说明: 最小的值是 2, 但是不存在第二小的值。
解题思路:
- 遍历所有结点,把所有结点的值保存在一个数组中
- 把数组中重复值去掉
- 找出去重数组中的第二小值
- 去重后的数组可能不存在第二小值,要分别讨论
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 #include<algorithm> 11 #include<queue> 12 class Solution { 13 public: 14 int findSecondMinimumValue(TreeNode* root) { 15 queue<TreeNode*> v; 16 vector<int> ans; 17 v.push(root); 18 while(!v.empty()){ 19 TreeNode* temp = v.front(); 20 ans.push_back(temp->val); 21 v.pop(); 22 if(temp->left != NULL) v.push(temp->left); 23 if(temp->right != NULL) v.push(temp->right); 24 } 25 sort(ans.begin(), ans.end()); 26 ans.erase(unique(ans.begin(), ans.end()), ans.end()); 27 if(ans.size()>1) return ans[1]; 28 else return -1; 29 } 30 };