首页 > 试题广场 >

异或传递

[编程题]异或传递
  • 热度指数:1025 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小红有一棵个节点的二叉树,节点的编号为,且每个节点的初始权值都为0
对于这棵二叉树小红会进行k次操作,每次操作小红会选择一个节点编号id,让以该编号节点为根的子树上节点的权值都异或上v
小红现在给你这棵树的结构以及每次操作的情况,小红想知道在她进行k次操作之后该棵二叉树各个节点的权值情况是多少呢,请你返回该树的权值情况。 
你需要完善一个函数,函数的第一个参数为给定的树的编号情况,第二个参数代表小红的操作,每个操作的第一项为编号id,第二项为异或的值v
示例1

输入

{1,2,3},[[2,4],[1,2]]

输出

{2,6,2}

说明

  1    权值情况:    0  ->   0  ->  2
 / \               / \     / \    / \    
2   3             0   0   4   0  6   2
示例2

输入

{2,1,3,#,4},[[3,2],[1,4],[1,3],[4,2],[2,1]]

输出

{1,6,3,#,4}

备注:

说明:本题目包含复杂数据结构TreeNode,点此查看相关信息
头像 直角三角熊
发表于 2023-03-19 13:53:58
牛客不保存代码,记录一下。 常规的暴力解法: 处理op数组,将[[3,2],[1,4],[1,3],[4,2],[2,1]]中[1,4],[1,3]这种情况合并为[1,7],这里合不合并都一样,是性能的问题。 遍历,将每个节点的值设置为0,同时用map<int, TreeNode*>保 展开全文