First of all, this question is not valid, as the assumption is father node value is the smaller value of its children. However, in the tests, there are cases when all the children have the same value of parent.
The following solution, nevertheless can address this problem also.
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def findSecondMinimumValue(self, root): """ :type root: TreeNode :rtype: int """ def traversal(node): if node == None or node.left == None: return None first, second = None, None if node.left.val < node.right.val: first = traversal(node.left) second = node.right elif node.left.val > node.right.val: first = traversal(node.right) second = node.left else: first = traversal(node.left) second = traversal(node.right) if first and second: if first.val < second.val: return first return second if not first: return second return first found = traversal(root) if not found: return -1 return found.val