[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)

作者:Esofar

出处:https://www.cnblogs.com/DCFV/p/18442779

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Duancf  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示