力扣刷题19天

news2024/12/25 22:33:22

106.从中序与后序遍历序列构造二又树(1、在中序、前序和后序,每轮取得时候数量都一样. 2、必须要有中序才能推测出来)

        这道题下面是前提:

                              

          如果没有这个前提,会出现下面情况(前序遍历会变成新的树):

        运行代码:

class Solution:
    def buildTree(self, inorder: List[int], postorder: List[int]) -> Optional[TreeNode]:
        # 第一步: 特殊情况讨论: 树为空. 或者说是递归终止条件
        if not postorder:
            return

        post_value=postorder[-1]
        root=TreeNode(post_value)
        index=inorder.index(post_value)
        left_value=inorder[:index]
        right_value=inorder[index+1:]

        post_left_value=postorder[:len(left_value)]
        post_right_value=postorder[len(left_value):len(left_value)+len(right_value)]#和下面的都可以
        #post_right_value = postorder[len(left_value):len(postorder)-1]
        root.left=self.buildTree(left_value,post_left_value)
        root.right=self.buildTree(right_value,post_right_value)

        return root

 

        下面代码中出现的问题:

class TreeNode:
    def __init__(self, val=None, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

class Solution:
    def buildTree(self, inorder, postorder) :
        # 第一步: 特殊情况讨论: 树为空. 或者说是递归终止条件
        if not postorder:
            return 0

        # 第二步: 后序遍历的最后一个就是当前的中间节点
        root_val = postorder[-1]
        root = TreeNode(root_val)

        # 第三步: 找切割点.
        root_index = inorder.index(root_val)

        # 第四步: 切割inorder数组. 得到inorder数组的左,右半边.
        left_inorder = inorder[:root_index]
        right_inorder = inorder[root_index + 1:]

        # 第五步: 切割postorder数组. 得到postorder数组的左,右半边.
        # ⭐️ 重点1: 中序数组大小一定跟后序数组大小是相同的.
        left_postorder = postorder[:len(left_inorder)]
        print("left",left_postorder)
        right_postorder = postorder[len(left_inorder): len(postorder) - 1]
        print("right", right_postorder)
        # print(root.val)
        # 第六步: 递归
        root.left = self.buildTree(left_inorder, left_postorder)
        root.right = self.buildTree(right_inorder, right_postorder)

        # 第七步: 返回答案
        return root














s = Solution()
# 构造一个二叉树,此处省略了构造函数的实现
# tree = TreeNode()
# targetSum=22
# tree = TreeNode(3)
# tree.left = TreeNode(3)
# # tree.left.left= TreeNode(20)
# # tree.left.left.left= TreeNode(7)
# # tree.left.left.right= TreeNode(2)
# tree.right = TreeNode(20)
# tree.right.left = TreeNode(15)
# tree.right.right = TreeNode(7)
# tree.right.right.right = TreeNode(1)
medium=[8,3,15,20,7]
right=[8,15,7,20,3]

gg=s.buildTree(medium, right)


def preorderTraversal(gg) :
    # 保存结果
    result = []

    def traversal(root: TreeNode):
        if root == None:
            return
        print(root)
        result.append(root.val)  # 前序
        traversal(root.left)  # 左8.left==0
        traversal(root.right)  # 右

    traversal(gg)
    return result
print(preorderTraversal(gg))
# print(s.hasPathSum(tree, targetSum))  #

105、从前序与中序遍历序列构造二叉树

        和上面那道题逻辑一样。

        运行代码:
 

class Solution:
    def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]:
        if not preorder:
            return
        value=preorder[0]
        root=TreeNode(value)
        root_index=inorder.index(value)
        left_list=inorder[:root_index]#左中序
        right_list=inorder[root_index+1:]#右中序

        left_froat=preorder[1:len(left_list)+1]
        right_froat=preorder[len(left_froat)+1:]

        root.left=self.buildTree(left_froat,left_list)
        root.right=self.buildTree(right_froat,right_list)




        return root

        做题的时候存在着以下问题(在中序、前序和后序,每轮取得时候数量都一样):

654.最大二叉树

        运行代码:

class Solution:
    def constructMaximumBinaryTree(self, nums: List[int]) -> Optional[TreeNode]:
        if not nums:
            return

        value=max(nums)
        root=TreeNode(value)
        root_index=nums.index(value)
        left_list=nums[:root_index]
        right_list=nums[root_index+1:]

        root.left=self.constructMaximumBinaryTree(left_list)
        root.right=self.constructMaximumBinaryTree(right_list)

        return root

        写代码时存在问题如下: 

617.合并二叉树

        代码如下:

class Solution:
    def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:
        if  root1==None:
            return root2#return 只是为了不往下运行
        if not root2:
            return root1
        root1.val+=root2.val
        root1.left=self.mergeTrees(root1.left,root2.left)
        root1.right=self.mergeTrees(root1.right,root2.right)
        return root1

        没啥好说的,迭代接收节点对象。

700.二叉搜索树中的搜索

        前置知识:

                二叉搜索树(BST)定义:

 

 

         做错的思路血缘总结:

                思路流程: 

        运行代码: 

class Solution:
    def searchBST(self, root: TreeNode, val: int) -> TreeNode:
        # 为什么要有返回值: 
        #   因为搜索到目标节点就要立即return,
        #   这样才是找到节点就返回(搜索某一条边),如果不加return,就是遍历整棵树了。

        if not root or root.val == val: 
            return root

        if root.val > val: 
            return self.searchBST(root.left, val)

        if root.val < val: 
            return self.searchBST(root.right, val)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/514400.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL简介与基本的select语句

1.SQL的分类 DDL(Data Definition Languages、数据定义语言)&#xff0c;这些语句定义了不同的数据库、表、视图、索引等数据库对象&#xff0c;还可以用来创建、删除、修改数据库和数据库表的结构. 主要的语句关键字包括 CREATE、DROP、ALTER等。 DML(Data Manipulation Lan…

CSS3 的其他特性(了解)

目录 1.CSS3滤镜filter&#xff1a; 2.CSS3 calc函数 3.CSS3 过度&#xff08;重点&#xff09; 4.进度条案例 5.侠义的HTML5 CSS3 1.CSS3滤镜filter&#xff1a; filter CSS属性及那个模糊或颜色偏移等图形效果应用于元素。 filter: 函数()&#xff1b; 例如&#xff1a;…

端子排电压继电器 动作时间短 35mm卡槽安装 JY-7GA/2 80-320VAC

JY-7GA/2端子排电压继电器品牌:JOSEF约瑟名称:端子排电压继电器型号:JY-7GA/2电压整定范围:60200VAC/90300VDC功率消耗:&#xff1c;3W触点容量:250V5A返回系数:过压0.920.96/欠压1.041.08 系列型号&#xff1a; JY-7GA/DK/220端子排电压继电器&#xff1b; JY-7GB/DK/220端…

sqoop将hive中的数据导入MySQL不能正常显示中文——已解决

问题&#xff1a; 原因&#xff1a; 结果查看 问题&#xff1a; 在做练习利用sqoop工具将hive中的表导入到MySQL之后&#xff0c;在MySQL查看中文部分不能正常显示 输入sqoop执行语句 sqoop export -connect "jdbc:mysql://HadoopMaster:3306/hive_to_mysql?useUnicode…

要不要提前去实习?

大家好&#xff0c;我是帅地。 秋招结束&#xff0c;很多人在纠结要不要提前去公司实习&#xff0c;最近也有一些帅友问了这个问题 说说我去年在腾讯实习的经历给你做个参考吧。 入职前的学习 20年初那会&#xff0c;还是蛮激动&#xff0c;之前我从来没有去打过工&#xff…

如何用Xcode安装ipa

Xcode安装ipa iOS APP上架App Store其中一个步骤就是要把ipa文件上传到App Store&#xff01;​ 下面进行步骤介绍&#xff01;​ 利用Appuploader这个软件&#xff0c;可以在Windows、Linux或Mac系统中申请ios和上传IPA到App Store Connect。​ 非常的方便&#xff0c;没有…

08-01 分布式系统理论

分布式一致性和CAP理论 C&#xff08;一致性&#xff09;&#xff1a;在分布式环境中&#xff0c;一致性是指数据在多个副本之间能否保持一致的特性A&#xff08;可用性&#xff09;&#xff1a;系统提供的服务必须一直处于可用的状态&#xff0c;对于用户的每一个操作请求总是…

butter滤波器

文章目录 什么是巴特沃斯滤波器&#xff1f;滤波器的阶数的含义matlab中的butterscipy.signal butter 中有哪些参数&#xff0c;各参数分别是什么含义&#xff1f; 本节围绕以下问题展开 butter 是什么&#xff1f;滤波器的阶数是什么意思&#xff1f;matlab中的butter参数含义…

00后工资太低想转行?选择云计算如何

00后已经成为目前从业最年轻的群体&#xff0c;有活力也需求明确&#xff0c;搞钱已经成为上班最核心的目的。但也有一波比较迷茫的00后&#xff0c;比如原专业学得不好&#xff0c;没有对口就业、工作内容不喜欢、工资太低养不活自己等等。而工资太低也是大部分00后想转行的主…

Linux 服务器设置 jar包开机自启动

一、新建jar包启动sh文件 新建startup.sh脚本文件&#xff0c;启动项目jar包 nohup java -jar test.jar >/dev/null 2>&1 & 二、设置自动启动命令 1.进入rc.d目录 执行cd /etc/rc.d 命令&#xff0c;进入rc.d目录 如图所示&#xff08;示例&#xff09;&…

如何将参考文献格式改成目标期刊要求的格式?

最近在改投期刊&#xff0c;所以要对参考文献的格式进行修改&#xff0c;记录一下修改过程中遇到的问题和解决方法&#xff0c;希望对小伙伴们有所帮助&#xff01; (1)问题&#xff1a;不知道目标期刊的参考文献格式是什么怎么办&#xff1f; (2)解决&#xff1a;下载目标期刊…

论文解读:DeepZ:一种用于Z-DNA预测的深度学习方法

标题 DeepZ: A Deep Learning Approach for Z-DNA Prediction. DOI 10.1007/978-1-0716-3084-6_15 期刊 Methods in molecular biology 作者 Nazar Beknazarov; Maria Poptsova 出版日期 2023-01-01 Github:https://github.com/Nazar1997/Sparse-vector 网址 https://doi…

一篇文章了解 Java IO 流

一&#xff1a;IO 流的概述 1. 什么是 IO 流&#xff1f; 存储和读取数据的解决方法 I&#xff1a;input O&#xff1a;output 流&#xff1a;像水流一样传输数据 2. IO 流的作用&#xff1f; 用于读写数据&#xff08;本地文件&#xff0c;网络&#xff09; 3. IO 流按…

linux系统 数组 的运用

这里写目录标题 数组数组的定义数组的定义方式输出数组的方式数组包括的数据类型数组的删除与追加数组的删除数组的追加 数组切片与替换切片替换 冒泡排序 数组 数组的定义 数组是存放相同类型数据的集合&#xff0c;在内存中开辟了连续的空间&#xff0c;通常配合循环使用 …

爬虫逆向——某建筑市场监管平台的滑块验证码分析

目录 网址链接&#xff1a; 正文&#xff1a; 一、思路分析 二、图片处理 三、完整代码 网址链接&#xff1a; aHR0cHM6Ly9nY3htLmh1bmFuanMuZ292LmNuL2RhdGFzZXJ2aWNlLmh0bWw &#xff08;bs64解密可见&#xff09; 正文&#xff1a; 注&#xff1a;分步的代码为示例…

C语言中数据结构——带头双向循环链表

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;数据结构 &#x1f525;座右铭&#xff1a;“不要等到什么都没…

如何删除打印机任务?三种快速删除打印机任务的方法

打印机用户可能会经常遇到添加错的打印任务&#xff0c;或是一不小心重复选择过多的打印任务&#xff0c;环保人人有责&#xff0c;杜绝纸张浪费&#xff0c;驱动人生就为大家带来快速删除打印任务的方法。 方法一&#xff1a;使用Windows自带的清理功能 在Windows操作系统中…

谷歌全线反击!PaLM 2部分性能已经超越GPT-4

ChatGPT横空出世&#xff0c;所有人都能够明确感知到AI的惊人潜力&#xff0c;瞬间改变了整个AI行业的节奏&#xff0c;不紧不慢的谷歌也开始紧张了。 ChatGPT舆论热潮仍未消退&#xff0c;红色警报又拉响 北京时间5月11日凌晨1点&#xff0c;Google I/O 2023开发者大会上发布…

C++ | 深拷贝和浅拷贝

C 深拷贝和浅拷贝 当类的函数成员存在__指针成员__时会产生深拷贝和浅拷贝和问题。 在进行对象拷贝时会使用默认拷贝构造函数&#xff0c;默认进行浅拷贝&#xff0c;即只会拷贝指针的值&#xff0c;新拷贝的指针与原来的指针指向同一内存&#xff1b; 浅拷贝带来的问题是&…

stm32裸机开发下利用MultiTimer多任务时间片询

stm32裸机开发下利用MultiTimer多任务时间片询 &#x1f4cc;MultiTimerGithub地址&#xff1a;https://github.com/0x1abin/MultiTimer ✨这是一个类似Arduino平台上的Ticker库&#xff0c;如需阅读懂源码&#xff0c;起码需要有链表知识的储备&#xff0c;如果仅仅只是拿来使…