📅  最后修改于: 2023-12-03 15:10:51.743000             🧑  作者: Mango
给定二叉树和距离D,检查二叉树中所有节点值相同的节点是否至少有两个节点距离超过D。
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def check_dist(root: TreeNode, D: int) -> bool:
nodes_dict = {}
# 遍历二叉树,将节点值作为key,节点作为value存储到哈希表
def traverse(node, level=0):
if node:
if node.val in nodes_dict:
nodes_dict[node.val].append((node, level))
else:
nodes_dict[node.val] = [(node, level)]
traverse(node.left, level+1)
traverse(node.right, level+1)
traverse(root)
# 遍历哈希表,对每个节点值相同的节点进行两两配对,并计算它们的距离
for key in nodes_dict:
if len(nodes_dict[key]) > 1:
for i in range(len(nodes_dict[key])-1):
for j in range(i+1, len(nodes_dict[key])):
if abs(nodes_dict[key][i][1] - nodes_dict[key][j][1]) > D:
return True
return False
遍历二叉树需要O(n)的时间复杂度,哈希表遍历和节点遍历的复杂度都是O(n),因此总时间复杂度为O(n^2)。
使用了一个哈希表存储节点,空间复杂度为O(n)。