671. 二叉树中第二小的节点

给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么这个节点的值不大于它的子节点的值。

给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。

示例 1:

输入: 
    2
   / \
  2   5
     / \
    5   7

输出: 5

说明: 最小的值是 2 ,第二小的值是 5 。

示例 2:

输入: 
    2
   / \
  2   2

输出: -1

说明: 最小的值是 2, 但是不存在第二小的值。

思路:

  • 遍历二叉树
  • 注意当所有值相同时不存在第二小的值
# 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
        """  
        
        stack = []
        result = []
        
        if not root:
            return -1
        
        stack.append(root)

        
        while stack:
            curr_node = stack.pop()
            result.append(curr_node.val)
            if curr_node.right:
                stack.append(curr_node.right)
            
            if curr_node.left:
                stack.append(curr_node.left)
                
        min_num = min(result)
        
        temp = [num for num in result if num > min_num]
        
        return min(temp) if temp else -1
posted @ 2018-09-25 16:46  yuyin  阅读(105)  评论(0)    收藏  举报