Second Minimum Node In a Binary Tree

304 阅读1分钟

原文: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;
    }
}
输出 :