[Python手撕]二叉树两节点之间的距离
class TreeNode:
def __init__(self, value=0, left=None, right=None):
self.value = value
self.left = left
self.right = right
def parent(root,p,q):
if root == p or root == q:
return root
left,right = None,None
if root.left:
left = parent(root.left,p,q)
if root.right:
right = parent(root.right,p,q)
if left and right:
return root
elif left:
return left
elif right:
return right
def distance(root,node):
queue = [[root,0]]
while queue:
temp,dis = queue.pop(0)
if temp == node:
return dis
else:
if temp.left:
queue.append([temp.left,dis+1])
if temp.right:
queue.append([temp.right,dis+1])
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
root.right.right = TreeNode(6)
root.left.right.left = TreeNode(7)
p = root.left.right.left # 节点 7
q = root # 节点 1
parent_node = parent(root,p,q)
dis_1 = distance(parent_node,p)
dis_2 = distance(parent_node,q)
print(dis_1 + dis_2)
合集:
手撕算法
Buy me a cup of coffee ☕.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?