腾讯音乐4.27笔试第二题
第二题A不出来啊,改了好久也只有20%,有大佬看看么。。
class TreeNode:
def __init__(self, x=0,left=None,right=None):
self.val = x
self.left = left
self.right = right
def xorTree(root: TreeNode, op) -> TreeNode:
def xorT(startNode,v):
'''
从当前节点开始,对该节点及其所有子节点进行异或
'''
if startNode == None:
return
#如果是初次修改就用0异或,并把结果保存在val中,如果不是就直接用val异或
if not visit[startNode][1]:
startNode.val = 0 ^ v
else:
startNode.val = startNode.val ^ v
visit[startNode][1] = True#已经访问过
startNode.left = xorT(startNode.left,v)
startNode.right = xorT(startNode.right,v)
return startNode
def doOneOp(Node,code,v):
'''
完成一次操作
'''
if Node == None:
return
if visit[Node][0] == code:
Node = xorT(Node,v)
return
else:
doOneOp(Node.left, code, v)
doOneOp(Node.right, code, v)
def initVisit(root,visit):
'''
初始化visit,第一个元素记录位置信息(编号),第二个元素记录是否是初次修改
'''
if root == None:
return
visit[root] = [root.val,False]
initVisit(root.left,visit)
initVisit(root.right,visit)
visit = {}#创建一个哈希表,第一个元素记录位置信息(编号),第二个元素记录是否是初次修改
initVisit(root,visit)
for opt in op:
doOneOp(root,opt[0],opt[1])
return root 
