968.バイナリツリーの監視

968.バイナリツリーの監視

image-20200922093628292

回答

通常、ツリーの問題を解決するために再帰を使用します。最初に、ツリーの下部に移動して(このノードの左と右の子は空で、空の子は状態1としてマークされます)、ノードの左ノードと右ノードのいずれかがカバーされている場合は、このノードをカバー(状態0)としてマークします。 (つまり、モニターがインストールされていません)、このノードのモニターをインストールし、モニター数のグローバル変数の増分を記録します。

モニターをインストールした後、ノードのステータスを2にマークすると、その親ノードがこのモニターによって監視されます。つまり、親ノードが上書きされ、ステータスは1になります。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    
    
    public int minCameraCover(TreeNode root) {
    
    
        if (lrd(root) == 0) {
    
    
            res++;
        }
        return res;
    }

    int res=0;
    int lrd(TreeNode node) {
    
    

        if (node == null) {
    
    
            return 1;
        }
        int left=lrd(node.left);
        int right=lrd(node.right);
        if (left == 0 || right == 0) {
    
    
            res++;
            return 2;
        }
        if(left==1&&right==1){
    
    
            return 0;
        }
        if(left+right>=3){
    
    
            return 1;
        }

        return -1;
    }
}

おすすめ

転載: blog.csdn.net/Rush6666/article/details/108724701