当前位置: 首页 > news >正文

重新求职刷题DAY18

1.513. 找树左下角的值

给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。

假设二叉树中至少有一个节点。

示例 1:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入: root = [2,1,3]
输出: 1

思路

这道题比较简单,层序遍历就行了

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
from collections import deque

class Solution:
    def findBottomLeftValue(self, root: Optional[TreeNode]) -> int:
        # 层序遍历
        queue = deque()
        queue.append(root)
        res = root.val

        while queue:
            
            for i in range(len(queue)):
                node = queue.popleft()
                if i == 0:
                    res = node.val

                if node.left:
                    queue.append(node.left)

                if node.right:
                    queue.append(node.right)    
        
        return res

2.112. 路径总和

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false

叶子节点 是指没有子节点的节点。

示例 1:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如上图所示。

思路

DFS,深度优先遍历

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
        def recur(node: Optional[TreeNode], sum_value: int):
            #如果是空节点
            if not node:
                return False
            sum_value += node.val
            # 如果是叶子节点
            if not node.left and not node.right:
                return sum_value == targetSum
            return recur(node.left, sum_value) or recur(node.right, sum_value)
        
        return recur(root, 0)

3.106. 从中序与后序遍历序列构造二叉树

给定两个整数数组 inorderpostorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树

示例 1:

在这里插入图片描述

输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]
输出:[3,9,20,null,null,15,7]

思路

注意写的递归函数,传参不要使用list

写一个dict优化index获取时间

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def buildTree(self, inorder: List[int], postorder: List[int]) -> Optional[TreeNode]:

        # 构造一个字典存储inorder每个元素和对应的idx关系
        inorder_v_idx = {num: i for i, num in enumerate(inorder)}
        # 左根右, 左右根
        
        def getTree(inorder_left_idx, inorder_right_idx, postorder_left_idx, postorder_right_idx) -> Optional[TreeNode]:
            if inorder_left_idx >= inorder_right_idx:
                return None
            
            inorder_root_idx = inorder_v_idx.get(postorder[postorder_right_idx - 1])

            root = TreeNode(postorder[postorder_right_idx - 1])

            root.left = getTree(inorder_left_idx, inorder_root_idx, postorder_left_idx, postorder_left_idx + inorder_root_idx - inorder_left_idx)
            root.right = getTree(inorder_root_idx + 1, inorder_right_idx, postorder_left_idx + inorder_root_idx - inorder_left_idx, postorder_right_idx - 1)
            return root
        return getTree(0, len(inorder), 0 ,len(postorder))

相关文章:

  • [Web 安全] Web 安全攻防 - 学习手册
  • 读取罗克韦尔AllenBradley Micro-Logix1400 罗克韦尔 CIP PCCC通信协议
  • 【Godot4.3】自定义圆角容器
  • FCC CE SRRC MIC是什么意思?
  • vue3 下载文件 responseType-blob 或者 a标签
  • java练习(39)
  • 【C语言基础】基本数据类型和常量介绍
  • MinIO Go 客户端 API
  • DSP芯片C6678的SRIO及其中断跳转的配置
  • 【Java】I/O 流篇 —— 字节 I/O 流
  • Starlink卫星动力学系统仿真建模第九讲-滑模(SMC)控制算法原理简介及卫星控制应用
  • 深入理解Self-Attention - 原理与等价表示
  • 15.1 智能销售顾问系统架构与业务价值解析:AI 如何重塑销售流程
  • RTOS系统ulTaskNotifyTake怎么知道哪个发送任务通知函数的pxcurrentTCB
  • 4.WebSocket 配置与Nginx 的完美结合
  • react路由总结
  • IDEA搭建SpringBoot,MyBatis,Mysql工程项目
  • 学习threejs,使用createMultiMaterialObject创建多材质对象
  • 小视频压缩实用方法大汇总
  • 6.2 - UART串口数据发送之轮询
  • 注册个免费网站/如何建立自己的博客网站
  • 飞色网站商城怎么做/谷歌推广效果怎么样
  • 电子网站建设ppt模板/赛雷猴是什么意思