阿里云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模式
点赞 回复
分享
发布于 03-21 18:19 浙江

相关推荐

4 9 评论
分享
牛客网
牛客企业服务