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.
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: 2 / \ 2 5 / \ 5 7 Output: 5 Explanation: The smallest value is 2, the second smallest value is 5.
Example 2:
Input: 2 / \ 2 2 Output: -1 Explanation: The smallest value is 2, but there isn't any second smallest value.<Solution>
想法如下
- 一開始想歷遍 tree 加上 TreeSet,這樣可以濾掉重複的數字外,還可以順便排序。會過,但是效率不夠好
- 因為題目的規定,min 一定會是 root.val,配合 recursive 的方式去歷遍找答案
- 如果某個 node.val 比目前找到的答案大,也不用再檢查下去
- 如果某個 node.val 比 min 大且比目前的答案小,更新答案,然後也不用檢查下去,因為題目規定,如果有左右子樹,根的值一定是最小的了
Java(參考解答)
kotlin
沒有留言:
張貼留言