原题链接:https://leetcode.com/problems/second-minimum-node-in-a-binary-tree/
这个题的树有两个特点,一个是树如果有儿子一定有两个,另一个是根节点的值是根、左、右三个节点值最小的点。最开始的想法是基于先序遍历在树的遍历过程中剪枝,但发现这种方法在递归过程中比较难实现,就使用了另外一种办法:先序遍历整个树,在遍历过程中将值加入set中,去掉set中最小的值,如果set不为空就返回当前set中的最小值,代码如下:
class Solution(object):
def findSecondMinimumValue(self, root):
"""
:type root: TreeNode
:rtype: int
"""
seMinValue = set([])
#先序遍历
def inOrder(node):
if node == None:
return
seMinValue.add(node.val)
if node.left != None:
inOrder(node.left)
inOrder(node.right)
inOrder(root)
if not seMinValue:
return -1
seMinValue.remove(min(seMinValue))
if not seMinValue:
return -1
return min(seMinValue)