代码随想录补打卡 968 监控二叉树

968 监控二叉树 

代码如下

/**

 * Definition for a binary tree node.

 * type TreeNode struct {

 *     Val int

 *     Left *TreeNode

 *     Right *TreeNode

 * }

 */

func minCameraCover(root *TreeNode) int {

             res := 0 

             var traversal func(cur *TreeNode) int  

             traversal =  func(cur *TreeNode) int {

                 if  cur == nil {   //首先明确各个数字代表的状态 0 代表无覆盖 1 代表有摄像头 2 代表有覆盖  如果遇到叶子节点则需要返回,叶子节点的子节点为空,空节点代表有覆盖的状态,所以返回2 

                     return 2

                 }

                 left := traversal(cur.Left)  //进行后序遍历 

                 right := traversal(cur.Right)

                 if left == 2 && right == 2 {  //中间的处理逻辑分为三类 第一种是如果两个叶子节点都为有覆盖的状态,那么这个父节点则为无覆盖的状态,因为这个节点的两个子节点都为有覆盖所以这个节点不需要覆盖,只要这个节点的父节点为摄像头即可

                     return 0

                 }

                 if left == 0 || right == 0 {  //如果其中一个子节点为无覆盖,那么就需要在这个节点设置摄像头并返回1

                     res++

                     return 1

                 }

                 if left == 1 || right == 1 {  //如果其中有一个子节点有摄像头说明此处无需覆盖

                     return 2

                 }

                 return -1

             }

            if traversal(root) == 0 {  如果根节点是无覆盖的状态,那么就需要在根节点设置一个摄像头

                res++

            }

            return res 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值