# [Leet Code] Second Minimum Node in a Binary Tree

Leetcode: https://leetcode.com/problems/second-minimum-node-in-a-binary-tree/

Problem:

Given a non-empty special binary tree consisting of nodes with the non-negative value, where each node in this tree has exactly `two`

or `zero`

sub-node. If the node has two sub-nodes, then this node's value is the smaller value among its two sub-nodes. More formally, the property `root.val = min(root.left.val, root.right.val)`

always holds.

Given such a binary tree, you need to output the **second minimum** value in the set made of all the nodes’ value in the whole tree.

If no such second minimum value exists, output -1 instead.

**Example 1:**

**Input:** root = [2,2,5,null,null,5,7]

**Output:** 5

**Explanation:** The smallest value is 2, the second smallest value is 5.

**Example 2:**

**Input:** root = [2,2,2]

**Output:** -1

**Explanation:** The smallest value is 2, but there isn't any second smallest value.

Solution:

`# Definition for a binary tree node.`

# class TreeNode(object):

# def __init__(self, val=0, left=None, right=None):

# self.val = val

# self.left = left

# self.right = right

class Solution(object):

def findSecondMinimumValue(self, root):

"""

:type root: TreeNode

:rtype: int

"""

elements = []

self.helper(root, elements)

if len(list(set(elements))) >= 2:

return sorted(list(set(elements)))[1]

else:

return -1

def helper(self, root, elements):

if root:

self.helper(root.left, elements)

elements.append(root.val)

self.helper(root.right, elements)