寫在前面
題目詳情
給定一個非空特殊的二叉樹,每個節點都是正數,並且每個節點的子節點數量只能爲 2 或 0。如果一個節點有兩個子節點的話,那麼該節點的值等於兩個子節點中較小的一個。
給出這樣的一個二叉樹,你需要輸出所有節點中的第二小的值。如果第二小的值不存在的話,輸出 -1 。
示例 1:
輸入:
2
/ \
2 5
/ \
5 7
輸出: 5
說明: 最小的值是 2 ,第二小的值是 5 。
示例 2:
輸入:
2
/ \
2 2
輸出: -1
說明: 最小的值是 2, 但是不存在第二小的值。
ac代碼
- 解題思想
- 先序遍歷,存儲節點至
set<int>
集合
- 從
set(元素有序)
集合中取出第2大元素
class Solution
{
private:
set<int> s;
void preOrder(TreeNode* root)
{
if(!root)
return;
s.insert(root->val);
preOrder(root->left);
preOrder(root->right);
}
public:
int findSecondMinimumValue(TreeNode* root)
{
preOrder(root);
set<int>::iterator it = s.begin();
if(s.size()>1)
return *(++it);
return -1;
}
};