阿里云3.17笔试第三题理解

题目:给定一棵树,每个节点值为0或1,每次操作可以选择一个节点,将其值与1异或,并且所有与该节点距离为偶数的节点的值也与1异或。问最少需要多少次操作,可以使所有节点值都为0?

思路:
1. 随意选择一个节点作为根节点,根节点的高度为0,是偶数,则其他所有节点都有一个高度,高度的奇偶性可以确定。
2. 如果一个节点值为0,则与1异或后,节点值变为1;反之亦然。所以,节点值与1异或其实就是做了翻转操作。
3. 如果有两个同一条路径上的高度为奇数(或偶数)的节点都做了翻转操作,则该路径上接下来高度为奇数(或偶数)的节点不需要翻转。
所以可以采用DFS,用一个变量oddReverse表示奇数高度的节点需要翻转,另一个变量evenReverse表示偶数高度的节点需要翻转。
遍历当前节点时,首先判断当前节点的高度是奇数还是偶数。以奇数为例,如果oddReverse为真,如果节点本身是1,则正常翻转即可,如果节点本身是0,则翻转后变为1不符合要求,所以需要再次翻转,即操作次数加1,oddReverse变为假;如果oddReverse为假,如果节点本身是1,则需要翻转,即操作次数加1,oddReverse变为真,如果节点本身是0,则不需要翻转。
最后遍历所有子节点,将高度加1,oddReverse和evenReverse作为参数传递进递归函数。
全部评论
楼主,请问阿里云笔试是leetcode模式还是ACM模式
点赞 回复 分享
发布于 2024-03-21 18:19 浙江

相关推荐

07-11 11:10
门头沟学院 Java
请问各位大三兄弟们跟hr说多久实习时间到时候可以提前跑路吗?
程序员小白条:问就是六个月以上,可以一年,实习都这样,你入职后想跑就跑
点赞 评论 收藏
分享
06-17 00:26
门头沟学院 Java
程序员小白条:建议换下项目,智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend 智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem 选项目要选自己能掌握的,然后最好能自己拓展的,分布式这种尽量别去写,不然你只能背八股文了,另外实习的话要多投,尤其是学历不利的情况下,多找几段实习,最好公司title大一点的
无实习如何秋招上岸
点赞 评论 收藏
分享
nus2201602...:兄弟,你这个简历撕了丢了吧,就是一坨,去找几个项目,理解项目流程,看几遍就是你的了,看看八股就去干了,多看看牛客里别人发出来的简历,对着写,你这写的啥啊,纯一坨
点赞 评论 收藏
分享
评论
4
10
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务