首页 > 编程语言 >[Python手撕]二叉树两节点之间的距离

[Python手撕]二叉树两节点之间的距离

时间:2024-10-01 11:44:35浏览次数:7  
标签:right TreeNode parent Python 二叉树 dis root 节点 left

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)

标签:right,TreeNode,parent,Python,二叉树,dis,root,节点,left
From: https://www.cnblogs.com/DCFV/p/18442779

相关文章

  • 代码随想录算法训练营Day17 | 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜
    目录654.最大二叉树617.合并二叉树700.二叉搜索树中的搜索98.验证二叉搜索树654.最大二叉树题目654.最大二叉树-力扣(LeetCode)给定一个不重复的整数数组nums。最大二叉树可以用下面的算法从nums递归地构建:创建一个根节点,其值为nums中的最大值。递归地在......
  • [Python手撕]部分排序
    classSolution:defsubSort(self,array:List[int])->List[int]:n=len(array)start,end=-1,-1#从前往后找到第一个逆序foriinrange(n-1):ifarray[i]>array[i+1]:start=i+1......
  • COMM 337 Python code in your notebook
    COMM337:Homework2DUEDATE:Oct2,202412:00pmThisisHW2Pythonassignment.Thereare13problems.Eachproblemis7pointsandthetotalis100points(9forfollowingfile/printformat).Instructions:Latesubmissionswillnotbeaccepted.Submit......
  • [python] 基于PyOD库实现数据异常检测
    PyOD是一个全面且易于使用的Python库,专门用于检测多变量数据中的异常点或离群点。异常点是指那些与大多数数据点显著不同的数据,它们可能表示错误、噪声或潜在的有趣现象。无论是处理小规模项目还是大型数据集,PyOD提供了50多种算法以满足用户的需求。PyOD的特点包括:统一且用户友......
  • Python 进程:掌控并发世界的钥匙
    引言进程,作为一种操作系统的基本调度单元,它不仅能够独立执行程序,还支持并发操作,这对于提升程序效率、改善用户体验至关重要。特别是在Python这样的解释型语言中,由于全局解释器锁(GIL)的存在,使得多线程在CPU密集型任务上的表现不如预期。此时,利用多进程便成为了一种有效的解决策略。......
  • Python 并发新境界:探索 `multiprocessing` 模块的无限可能
    引言随着硬件技术的发展,多核处理器已经成为标准配置。这意味着我们的计算机拥有执行多个任务的能力。然而,默认情况下,Python程序由于全局解释器锁(GIL)的存在,并不能充分利用这些核心资源。这就引出了multiprocessing模块的重要性——它通过创建独立进程来绕过GIL限制,从而实现真正的并......
  • 完全二叉树的层序遍历(另一个角度,复杂版)(PTA)
    题目:完全二叉树的层序遍历一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树。对于深度为D的,有N个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前N个结点,这样的树就是完全二叉树。给定一棵完全二叉树的后序遍历,请你给出这棵树的层......
  • 教你如何免费获取股票数据用python、JavaScript (Node.js)、JAVA等多种语言的实例代码
    ​近一两年来,股票量化分析逐渐受到广泛关注。而作为这一领域的初学者,首先需要面对的挑战就是如何获取全面且准确的股票数据。因为无论是实时交易数据、历史交易记录、财务数据还是基本面信息,这些数据都是我们进行量化分析时不可或缺的宝贵资源。我们的核心任务是从这些数据......
  • Python工程数学2程序开胃菜(上)
    2数学程序开胃菜在上一章中(https://mp.weixin.qq.com/s/kKenXcEXIeLd_u_2kymF8A),我们介绍了python的IDE;用numpy实现向量计算;用Matplotlib绘图;用sympy实现微积分和求导;用SciPy实现积分;用VPython实现弹跳球动画。在本章中,您将了解Python命令式编程风格的线性程序结构以及分......
  • python tkinter 开发测试
    fromtkinterimport*defname_1_cs():ydm_1_2.place_forget()ydmwz_1_2.place_forget()ydmwz_1_2_B1.place_forget()xz_1_1.place_forget()ydmwz_1_2_B2.place_forget()xz_1_2.place_forget()mulu_1.place_forget()mulu_2.plac......