首页 > 编程语言 >数据结构与算法学习——二叉树

数据结构与算法学习——二叉树

时间:2024-05-28 23:11:59浏览次数:27  
标签:right return val self 算法 二叉树 数据结构 root left

题目

PS:下列题目均来自leetcode中灵神题单

938. 二叉搜索树的范围和

class Solution:
    def rangeSumBST(self, root: TreeNode, low: int, high: int) -> int:
        if not root:
            return 0
        if root.val > high:
            return self.rangeSumBST(root.left, low, high)
        if root.val < low:
            return self.rangeSumBST(root.right, low, high)
        return root.val + self.rangeSumBST(root.left, low, high) + self.rangeSumBST(root.right, low, high)

2385. 感染二叉树需要的总时间

class Solution:
    def amountOfTime(self, root: Optional[TreeNode], start: int) -> int:
        G=defaultdict(list)
        def dfs(root):
            if root:
                if root.left:
                    G[root.val].append(root.left.val)
                    G[root.left.val].append(root.val)
                    dfs(root.left)
                if root.right:
                    G[root.val].append(root.right.val)
                    G[root.right.val].append(root.val)
                    dfs(root.right)
        dfs(root)

        q = deque([[start, 0]])
        vis=set()
        vis.add(start)
        while q:
            val,time=q.popleft()
            for around in G[val]:
                if around not in vis:
                    q.append([around, time + 1])
                    vis.add(around)
        return time

112. 路径总和

class Solution:
    def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
        def search(root,pathval):
            if not root:
                return False            
            pathval += root.val
            if not root.left and not root.right:
                return pathval == targetSum           
            return search(root.left,pathval) or search(root.right,pathval)      
        return search(root,0)
class Solution:
    def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
        def search(root,sum):
            if not root:
                return False
            sum-=root.val

            if not root.left and not root.right:
                if sum==0:
                    return True
                return False
            
            return search(root.left,sum) or search(root.right,sum)
        return search(root,targetSum)

标签:right,return,val,self,算法,二叉树,数据结构,root,left
From: https://www.cnblogs.com/zzddkkhome/p/18219035

相关文章

  • 数据结构与算法
    数据结构与算法导航目录数据结构与算法导航一、数据结构与算法概念数据结构的定义算法伪代码二、线性表线性表三、队列与栈栈队循环队列四、窜广义表窜五、数组六、树与二叉树树二叉树七、图图的存储八、查找五大查找顺序查找二分查找二叉查找树(排序)二叉平衡树哈夫曼树B-树B+......
  • 数据结构-单向链表的实现(c语言)
    链表的定义:链表是由一系列的结点组成的,每个结点包含两个域,分别是指针域(*next)与数据域(data)。单向链表的实现//.h文件#ifndeDXLB_H#defineDXLB_H//定义结点结构体typedefstructLINKNODE{structLINKNODE*next;//指向下一个结点的指针intdata;......
  • 数据结构—线性表
    线性表的定义:    线性表是具有相同特性的数据元素的一个有限序列,类似于数组。    线性表中的元素都有一个直接前驱和直接后继,除了第一个首元素和最后一个元素线性表的实现:    使用线性表模拟动态数组的实现:                //.......
  • 旅行第三天【算法】双指针-----盛最多水的容器
    文章目录一、题目二、算法原理三、编写代码一、题目链接:盛最多水的容器二、算法原理首先,这种题可以用暴力解法(枚举每一种容器的大小情况),但是显然会超时(不用尝试啦,我已经试过啦!)其次还是咱们的主题----->利用双指针来求解下面先附上草稿图容器面积=高度(左......
  • 【LeetCode算法】第88题:合并两个有序数组
    目录一、题目描述二、初次解答三、官方解法四、总结一、题目描述二、初次解答1.思路:首次想到的解法:定义一个m+n长度的辅助数组,从头遍历这两个数组,谁小就放进辅助数组中并且对应往后走,最后使用memcpy函数将辅助数组内容拷贝到nums1中。这种解法容易想到,但是空间复杂......
  • 【LeetCode算法】第83题:删除排序链表中的重复元素
    目录一、题目描述二、初次解答三、官方解法四、总结一、题目描述二、初次解答1.思路:双指针法,只需遍历一遍。使用low指向前面的元素,high用于查找low后面与low不同内容的节点。将具有不同内容的节点链接在low后面,实现重复元素的删除。2.代码:/***Definitionfor......
  • 代码随想录算法训练营第七天|454(四数相加||),383(赎金信),15(三数之和),18(四数之和)
    哈希三数之和和四数之和,和两数之和一样,是对一个数组来进行检索。因为要求元组不能重复,需要用多指针的方法来遍历和判断。由于两数之和没有这个要求且要返回下标,所以用了哈希表。但哈希表难以检测是否重复,不如双指针直接。四数相加||是对四个数组来做相加,且不要求元组重复,可用哈......
  • 数据结构初阶 栈
    一.栈的基本介绍1.基本概念栈是一种线性表是一种特殊的数据结构栈顶:进行数据插入和删除操作的一端另一端叫做栈底压栈:插入数据叫做压栈压栈的数据在栈顶出栈:栈的删除操作叫做出栈出栈操作也是在栈顶栈遵循一个原则叫做后进先出(比如说子弹的弹夹其实就是一种设......
  • 实现双链表各种基本运算的算法
    实验三:实现双链表各种基本运算的算法一、实验目的与要求目的:领会双链表存储结构和掌握双链表中各种基本运算算法设计。内容:编写一个程序dlinklist.cpp,实现双链表的各种基本运算和整体建表算法(假设链表的元素类型ElemType为char),并在此基础上设计一个程序exp2-3.cPp,......
  • 算法题模版(C语言)
    自用总结一、最大公约数(gcd)函数法:递归法(最简):二、最小公倍数(lcm)函数法:算出最大公约数后无需递归三、斐波那契数列(fibonacci)(fib)递归法(最简):    ......