📅  最后修改于: 2023-12-03 14:50:03.308000             🧑  作者: Mango
在二叉树中,每个节点都有一个指向左节点和右节点的指针。但是,在某些情况下,我们可能需要为节点添加一个指向任意节点的指针,这就是随机指针,它可以指向二叉树中的任意节点。
当我们需要克隆一个带有随机指针的二叉树时,需要考虑如何同时复制节点和随机指针的关系。下面给出一个使用哈希表的方法来实现这个过程。
# 定义二叉树节点的类
class Node:
def __init__(self, val, left, right, random):
self.val = val
self.left = left
self.right = right
self.random = random
def copyRandomBinaryTree(root: 'Node') -> 'Node':
# 哈希表用来存储原二叉树节点和克隆二叉树节点的对应关系
visited = {}
# 递归函数用来从原二叉树复制节点和随机指针关系到克隆二叉树,并返回克隆后的节点
def clone(node: 'Node') -> 'Node':
if not node:
return None
if node in visited:
return visited[node]
# 创建克隆节点并保存在哈希表中
clone_node = Node(node.val, None, None, None)
visited[node] = clone_node
# 递归赋值左节点、右节点和随机节点指针
clone_node.left = clone(node.left)
clone_node.right = clone(node.right)
clone_node.random = clone(node.random)
return clone_node
# 分别从原二叉树和克隆二叉树的根节点开始复制节点
return clone(root)