バイナリツリーで第2の最小のノード

このツリーの各ノードが正確有する非負の値を有するノードからなる非空特別なバイナリツリー所与  two または  zero サブノード。ノードが2つのサブノードを有している場合、このノードの値は、その2つのサブノードのうち小さい方の値です。より正式に、プロパティは  root.val = min(root.left.val, root.right.val) 常に保持しています。

バイナリツリーを考えると、あなたは出力に必要な  第2の最小  セットの値が全体ツリー内のすべてのノードの値で作られました。

このような第2の最小値が存在しない場合、出力-1代わり。

例1:

入力:  
    2 
   / \ 
  2 5 
     / \ 
    5~7 出力: 5
 説明:最小値が2である、第二の最小値は5です。

アイデア:最小のルートである、最小の最小値よりも若干大きい被写体に見えます。

缶レベル順traveral O(N)。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public int findSecondMinimumValue(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        int min = root.val;
        queue.offer(root);
        int diff = Integer.MAX_VALUE;
        int res = -1;
        while(!queue.isEmpty() ) {
            TreeNode node = queue.poll();
            if(node.val > min) {
                if(node.val - min < diff) {
                    diff = node.val - min;
                    res = node.val;
                }
            }
            if(node.left != null) {
                queue.offer(node.left);
            }
            if(node.right != null) {
                queue.offer(node.right);
            }
        }
        return res;
    }
}

DFS、分割統治

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public int findSecondMinimumValue(TreeNode root) {
        return dfs(root, root.val);
    }
    
    private int dfs(TreeNode root, int min) {
        if(root == null) {
            return -1;
        }
        if(root.val > min) {
            return root.val;
        }
        int leftmin = dfs(root.left, min);
        int rightmin = dfs(root.right, min);
        if(leftmin == -1 || rightmin == -1) {
            return Math.max(leftmin, rightmin);
        } else {
            return Math.min(leftmin, rightmin);
        }
    }
}

 

公開された673元の記事 ウォン称賛13 ビュー180 000 +

おすすめ

転載: blog.csdn.net/u013325815/article/details/105195533