原文:https://leetcode.com/problems/second-minimum-node-in-a-binary-tree/description/
原文的意思就是寻找第二小的节点,两个附加条件,第一个父节点一定是两个子节点中最小的那个,第二个,父节点,要么有两个子节点,要没有子节点。
思考:要是二叉搜索树直接中序排序,找第二个就行了,但这个就是个二叉树,还有这两个附加条件。
来源:https://leetcode.com/problems/second-minimum-node-in-a-binary-tree/discuss/107164/Very-simple-Java-solution
class Solution {
public int findSecondMinimumValue(TreeNode root) {
if(root == null)
return -1;
Set<Integer> set = new TreeSet<Integer>();
dfs(root,set);
Iterator<Integer> it = set.iterator();
int count = 0;
while(it.hasNext()){
int result =it.next();
count++;
if(count==2)
return result;
}
return -1;
}
public void dfs(TreeNode root,Set<Integer> set){
if(root == null) return;
set.add(root.val);
dfs(root.left,set);
dfs(root.right,set);
return;
}
}
用set保证set集合里全是不重复的,并且 treeset是有序的,我还是才反应过来,
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class Node {
public static void main(String [] args){
TreeNode t = new TreeNode(8);
t.left = new TreeNode(15);
t.right = new TreeNode(8);
t.left.left = new TreeNode(20);
t.right.right = new TreeNode(15);
t.right.left = new TreeNode(8);
t.right.right = new TreeNode(14);
Set<Integer> set = new TreeSet<Integer>();
dfs(t,set);
Iterator<Integer> it = set.iterator();
while(it.hasNext()){
int result =it.next();
System.out.println(result);
}
}
private static void dfs(TreeNode t, Set<Integer> set) {
if(t == null) return;
set.add(t.val);
dfs(t.left,set);
dfs(t.right,set);
return;
}
}
输出 :