小黑看完题解思路后代码
# 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: Optional[TreeNode]) -> int:
        '''
            状态转移:
                0:无覆盖
                1:被覆盖
                2:放置摄像头
        '''
        self.result = 0
        # 定义递归函数
        def dfs(node):
            # 结点为空,当成已覆盖
            if not node:
                return 1
            # 后序遍历,判断孩子结点的顺序
            left = dfs(node.left)
            right = dfs(node.right)
            # 左右结点都被覆盖,则该结点不必覆盖
            if left == right == 1:
                return 0
            # 左右结点全是有相机的情况下,该结点被覆盖
            elif left == 2 and right == 2 :
                return 1
            # 其他情况,需要安装相机
            elif left == 0 or right == 0:
                self.result += 1
                return 2
            # 一个有相机 一个被覆盖,则这个被覆盖
            return 1
        root_status = dfs(root)
        # 如果root没有被覆盖,则安装相机
        if not root_status:
            self.result += 1
        return self.result
 

动态规划题解做法
# 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: Optional[TreeNode]) -> int:
        '''
            状态转移:
                0:无覆盖
                1:被覆盖
                2:放置摄像头
        '''
        self.result = 0
        # 定义递归函数
        def dfs(node):
            # 结点为空,当成已覆盖
            if not node:
                return 1
            # 后序遍历,判断孩子结点的顺序
            left = dfs(node.left)
            right = dfs(node.right)
            # 左右结点都被覆盖,则该结点不必覆盖
            if left == right == 1:
                return 0
            # 左右结点有一个未被覆盖,则安装相机
            elif left == 0 or right == 0:
                self.result += 1
                return 2
            # 其他情况均为被覆盖
            return 1
        root_status = dfs(root)
        # 如果root没有被覆盖,则安装相机
        if not root_status:
            self.result += 1
        return self.result
 

小黑生活
周五的晚饭与月光


 
小汤2第21课学习打卡

剪个头清醒清醒

最近太憋了,去医院看看,还好没啥事

麦当劳小憩
 

下午开启赶考之旅

 
 

 

下午考完搓个澡 足个疗 拔个罐 汗个蒸放松放松

 

 
 

回家路上再垫吧垫吧

 
 
 

 
第二天继续赶考,上午最后5分钟冲进考场

 
两个小时行测后,火速吃饭,来个达美乐

 
 
提前火速骑行2km赶往喜茶店,准备校招笔试
 

 
最后十分钟,连闯红灯,最后一分钟火速到达考场

 
连续3个小时申论的挣扎,让小黑知道了什么叫认真的重在参与,从小到大从来没一口气写那么多字

尝试一下坐公交回家,却遭遇多起交通事故的堵车

 
 
 
 

终于到达北京西站,坐地铁回家

 
饭后红酒牛排吹起来

 
 
新书包到啦

 
开启早高峰干饭之旅

 
 
把按摩仪退了

午餐 刷题 面试 下午怒干双人餐

 
 
 
 
 











![[数据库迁移]-LVM逻辑卷管理](https://img-blog.csdnimg.cn/c23844536fa0482a9dfe24fa6954c814.png#pic_center)



![websocket创建时附加额外信息 [如自定义headers信息(利用nginx)]](https://img-blog.csdnimg.cn/7b24f40dab04435eac4fe9b6dcd8e425.png)


