华为笔试题街区监控

为确保街区每个路灯被监控,需要在由前序排列表示的二叉树路灯结构上安装摄像头。每个摄像头能监控其父节点、自身及直接子节点。给定一个由'0'(路灯)和'#'(空节点)组成的字符串,任务是计算所需最小摄像头数量。例如,输入'00##0#0'将构建特定的二叉树,并需要2个摄像头。这个问题与LeetCode 968题相似,通过后序遍历判断节点是否需要安装摄像头。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

街区监控
题目描述
一个街区,为提高街区安全性,需在街区的路灯上安装若干摄像头,用一个二叉树表示街区的路灯,每个节点表示一个路灯,在路灯上安装摄像头。每个摄影头都可以监视其父对象、自身及其直接子对象。为保证每个路灯都被监控,请计算街区所需的最小摄像头数量。
输入描述:
输入一串字符,代表由前序排列的二叉树表示的路灯,字符由‘0’和‘#’组成,每个‘0’表示一个要监控路灯,‘#’表示子节点为空。
输出描述:
所需最小摄像头数量。
示例1输入输出示例仅供调试,后台判题数据一般不包含示例
输入

00##0#0

输出

2

说明
输入的路灯可以构建如下二叉树,1表示需要安装摄像头的路灯,输入的路灯数最少为2。

 0
 / \
1  1
      \
        0

leetcode 968. 监控二叉树 

首先是要根据先序序列重构二叉树,然后就和leetcode 968这题一模一样了。关键算法是要将每个节点的状态想清楚,分为3种状态,0:没有被覆盖 1:被覆盖但是没装摄像头 2:装了摄像头(自身、左右孩子、父节点都被覆盖)。所有节点初始时都时状态0,叶子节点不装摄像头。然后采用后序遍历的方式,从下到上,根据左右孩子节点的情况决定该节点是否要装摄像头。

#include
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值