671. 二叉树中第二小的节点https://leetcode.cn/problems/second-minimum-node-in-a-binary-tree/
难度简单272
给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2
或 0
。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。
更正式地说,即 root.val = min(root.left.val, root.right.val)
总成立。
给出这样的一个二叉树,你需要输出所有节点中的 第二小的值 。
如果第二小的值不存在的话,输出 -1 。
示例 1:
输入:root = [2,2,5,null,null,5,7] 输出:5 解释:最小的值是 2 ,第二小的值是 5 。
示例 2:
输入:root = [2,2,2] 输出:-1 解释:最小的值是 2, 但是不存在第二小的值。
提示:
[1, 25]
内1 <= Node.val <= 231 - 1
root.val == min(root.left.val, root.right.val)
- /**
- * Definition for a binary tree node.
- * public class TreeNode {
- * int val;
- * TreeNode left;
- * TreeNode right;
- * TreeNode() {}
- * TreeNode(int val) { this.val = val; }
- * TreeNode(int val, TreeNode left, TreeNode right) {
- * this.val = val;
- * this.left = left;
- * this.right = right;
- * }
- * }
- */
- class Solution {
- int min = Integer.MAX_VALUE;
- List<Integer> temp = new ArrayList<Integer>();
- public int findSecondMinimumValue(TreeNode root) {
- dfs(root);
- int flag=0;
- int x = Integer.MAX_VALUE;
- for(int i:temp)
- {
- if(i!=min && x>=i)
- {
- x=i;
- flag=1;
- }
- }
- if(flag!=0) return x;
- return -1;
- }
-
- void dfs(TreeNode root)
- {
- if(root==null) return;
- if(root.val<min) min = root.val;
- temp.add(root.val);
- dfs(root.left);
- dfs(root.right);
- }
- }