# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def minCameraCover(self, root: TreeNode) -> int:
res=0
def traversal(cur):
nonlocal res #nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量。
if cur==None:
return 2
left=traversal(cur.left)#左
right=traversal(cur.right)#右
# 从这往下都是中。
if left==2 and right==2:#1、左右结点都被覆盖,这个父结点应该是处于未被覆盖的状态
return 0
elif left==0 or right==0:#2、有一个被覆盖,那父结点就要安装摄像机,监控那个未被覆盖的子节点
res+=1
return 1
elif left==1 or right==1:#3、如果左右结点有一个有摄像机,那么父结点已经被覆盖
return 2
else:
return -1
if traversal(root)==0:res+=1#4、根结点未被覆盖,那么应该在此安装一个摄像机
return res
'''0表示未覆盖,1表示该结点有摄像机。2表示已经被覆盖。后序遍历可以确保从下而上的遍历整个二叉树。如果想尽可能少的放置摄像机。
我们不能在叶结点上放摄像机。所以要从下往上推。'''
leetcode968**
最新推荐文章于 2023-12-28 10:31:25 发布