二叉树OJ题(用前序和中序遍历构建二叉树,用中序和后续遍历构建二叉树)

news2024/11/30 18:45:14

文章目录

  • 二叉树OJ题
    • 一、用前序和中序遍历构建二叉树
      • 1.思路
      • 2.代码
    • 二、用中序和后续遍历构建二叉树
      • 1.思路
      • 2.代码


二叉树OJ题


一、用前序和中序遍历构建二叉树

在这里插入图片描述

1.思路

1.根据前序遍历找到根结点root

2.在中序遍历中(inBegin=0和inEnd=elem.length-1范围之间)找到根的位置 rootIndex

3.左树就是旧的inBegin=0到新的inEnd=rootIndex-1

4.右树就是新的inBegin= rootIndex+1到旧的inEnd

5.先创建根节点 ,找到当前根结点在中序排列中的位置 ,i++

6.遍历左右子树,返回值由根的左右接收,中序遍历的范围在子树中改变

7.因为右树inBegin = rootindex+1,左树inEnd=rootIndex -1 ,造成inBegin>inEnd时,返回空,说明没有子树了

2.代码

class Solution {
    public int i = 0;
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        return buildTreeChild(preorder,inorder,0,inorder.length-1);

    }
    public TreeNode buildTreeChild(int[] preorder, int[] inorder,int inBegin,int inEnd) { 
        if(inBegin>inEnd){
            return null; //没有子树了
        }
        TreeNode root = new TreeNode(preorder[i]);//创建根节点

        //找到当前根结点在中序排列中的位置 
        int rootIndex = findIndex(inorder,inBegin,inEnd,preorder[i]);
        i++;
        root.left = buildTreeChild(preorder,inorder,inBegin,rootIndex-1);
        //遍历创建左右子树,中序遍历中,左右子树的范围改变
        root.right = buildTreeChild(preorder,inorder,rootIndex+1,inEnd);
        
        return root;
        
    }
    private int findIndex(int[] inorder,int inBegin,int inEnd,int key){
        for(int i = inBegin;i<=inEnd;i++){//根基范围找到下标
            if(key == inorder[i]){
                return i;
            }
        }
        return -1;
    }    
}

二、用中序和后续遍历构建二叉树

在这里插入图片描述

1.思路

1.从后续遍历的末尾找到根节点,i–;

2.在中序遍历中找到根节点的下标

3.后续遍历是 左 -> 右 -> 根,先创建右树,在创建左树

4.右树范围:inBegin = rootIndex+1,左树范围:inEnd = rootindex-1

5.其余原理同上;

2.代码

class Solution {
 public int i = 0;
    public TreeNode buildTree( int[] inorder,int[]postorder) {
        i = postorder.length-1;
        return buildTreeChild(postorder,inorder,0,inorder.length-1);

    }
    public TreeNode buildTreeChild(int[] postorder, int[] inorder,int inBegin,int inEnd) { 
        if(inBegin>inEnd){
            return null; //没有子树了
        }
        TreeNode root = new TreeNode(postorder[i]);//创建根节点

        //找到当前根结点在中序排列中的位置 
        int rootIndex = findIndex(inorder,inBegin,inEnd,postorder[i]);
        i--;

        //遍历创建左右子树,中序遍历中,左右子树的范围改变
    root.right = buildTreeChild(postorder,inorder,rootIndex+1,inEnd);
    root.left = buildTreeChild(postorder,inorder,inBegin,rootIndex-1);       
        return root;
        
    }
    private int findIndex(int[] inorder,int inBegin,int inEnd,int key){
        for(int i = inBegin;i<=inEnd;i++){//根基范围找到下标
            if(key == inorder[i]){
                return i;
            }
        }
        return -1;
    }    
}

点击移步博客主页,欢迎光临~

偷cyk的图

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

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

相关文章

老外总结的14条Go接口最佳实践

最近几个月&#xff0c;没事喜欢看看老外写的技术文章&#xff0c;发现他们的一些思考维度真的有些不太一样。当然&#xff0c;他们写的文章大多数没有国内的那么卷。 今天这篇文章是关于Go语言中接口设计的一些最佳实践&#xff0c;与Java等语言不尽相似&#xff0c;但又带着…

Linux常用命令——chcon命令

在线Linux命令查询工具 chcon 修改对象&#xff08;文件&#xff09;的安全上下文 补充说明 chcon命令是修改对象&#xff08;文件&#xff09;的安全上下文&#xff0c;比如&#xff1a;用户、角色、类型、安全级别。也就是将每个文件的安全环境变更至指定环境。使用--ref…

Ubuntu连不上WiFi 或者虽然能连上校园网,但是浏览器打不开登录页面

写在前面 自己的电脑环境&#xff1a; Ubuntu20.04 一、问题描述 自己的 Ubuntu 遇到连接不上 除校园网之外的其他WiFi, 或者 虽然能连上校园网&#xff0c;但是浏览器打不开登录页面的问题。 二、解决方法 出现这种问题的原因可能是 之前开过VPN, 导致系统的网络设置出现…

上海亚商投顾:创业板指高开低走 传媒、游戏板块逆势大涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数昨日震荡调整&#xff0c;创业板指尾盘跌超1%。传媒、游戏板块逆势大涨&#xff0c;百纳千成、天龙集…

浮动模块布局

基本思路 若宽度和浏览器一样宽&#xff0c;则不需要设置width 一般父盒子使用标准流&#xff0c;然后标准流内使用浮动 一般父盒子需要居中显示&#xff0c;使用 margin: 0 auto; 注意浮动盒子之间的margin值 与 父盒子width、height值之间的相等关系&#xff0c;一定要计算…

APUS成为深圳市人工智能行业协会理事单位,CEO李涛受聘专家

近日&#xff0c;APUS正式成为深圳市人工智能行业协会理事单位&#xff0c;APUS董事长兼CEO李涛同时受聘为协会专家委员会专家。 深圳市人工智能行业协会成立于2017年&#xff0c;由电子通信、大数据、计算机视觉、自然语言处理等AI相关领域企事业单位组成&#xff0c;致力于加…

Goland 对容器中的 Go 程序断点远程调试

1&#xff0c;针对 golang 程序打断点有哪几种情况 临时进程&#xff1a;针对临时运行一次的 Golang 脚本&#xff0c;比如定时统计脚本&#xff0c;定时推送脚本。常驻进程&#xff1a;针对一直在后台运行的 Golang 程序&#xff0c;比如 HTTP 或者 GRPC 服务。 我们现在假设…

【多线程面试题二十一】、 分段锁是怎么实现的?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a; 分段锁是怎么实现的&am…

最新ChatGPT商业运营系统源码+支持GPT4/支持ai绘画+支持Midjourney绘画

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

[common c/c++] ring buffer/circular buffer 环形队列/环形缓冲区

前言&#xff1a; ring buffer / circular buffer 又名环形队列 / 环形缓冲区&#xff0c;其通过开辟固定尺寸的内存来实现反复复用同一块内存的目的。由于预先开辟了固定尺寸的内容&#xff0c;所以当数据满的时候&#xff0c;可以有两种处理方式&#xff0c;具体使用哪一种按…

DC系列 DC:3

DC系列 DC:3 文章目录 DC系列 DC:3调试靶机信息收集IP端口信息收集 框架漏洞利用joomscan扫描工具利用msf工具利用(无法使用)kali漏洞库利用sqlmap利用 文件上传提权 调试靶机 点击虚拟机设置选择CD/DVD点击高级将IDE调成画面中这个选项 信息收集 IP端口信息收集 对自己网…

【实战Flask API项目指南】之七 用JWT进行用户认证与授权

实战Flask API项目指南之 用JWT进行用户认证与授权 本系列文章将带你深入探索实战Flask API项目指南&#xff0c;通过跟随小菜的学习之旅&#xff0c;你将逐步掌握 Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧&#xff01; 前言 当小菜踏入Flask后端开发…

java匿名类

什么是匿名实现类&#xff1f; 定义&#xff1a; 在java中&#xff0c;匿名实现类对象是一种特殊的对象&#xff0c;它是通过匿名类来创建的。匿名类是一个没有名字的类&#xff0c;它是在代码中直接定义和实例化的。匿名实现类对象通常用于实现接口或者扩展类&#xff0c;因为…

Express框架开发接口之实现七牛云上传图片功能

安装和配置multer 注意&#xff1a;使用express.urlencoded()中间件无法解析multipart/form-data格式的请求体 数据。 当前项目&#xff0c;推荐使用 multer 来解析multipart/form-data格式的表单数据。https://www.npmjs.com/package/multer npm i multer 导入并配置multer &a…

【Apifox新支持】如何管理与调试 Dubbo 项目?

一、引入Dubbo3 不会介绍 Dubbo 如何使用&#xff0c;咱只提一嘴&#xff0c;然后说如何去测试 Dubbo 服务。Dubbo3 除了保持 2.x 的经典架构之外&#xff0c;还以解决微服务的进程通信为主要职责&#xff0c;通过丰富的服务治理能力来更好的管控微服务服务集群&#xff0c;简…

(免费领源码)java#springboot#MYSQL 电影推荐网站30760-计算机毕业设计项目选题推荐

摘 要 随着互联网时代的到来&#xff0c;同时计算机网络技术高速发展&#xff0c;网络管理运用也变得越来越广泛。因此&#xff0c;建立一个B/S结构的电影推荐网站&#xff1b;电影推荐网站的管理工作系统化、规范化&#xff0c;也会提高平台形象&#xff0c;提高管理效率。 本…

玩转AIGC(人工智能生成内容)需要一些小技巧

玩转AIGC&#xff08;人工智能生成内容&#xff09;的确需要一些技巧&#xff0c;而Prompt提示词的选择非常关键&#xff0c;可以影响到生成的答案。以下是一些与AI对话的技巧和咒语示例&#xff1a; 1&#xff0c;明确问题 确保你的Prompt清晰明了&#xff0c;包括主题、问题…

领星ERP如何无需API开发轻松连接OA、电商、营销、CRM、用户运营、推广、客服等近千款系统

领星ERP&#xff08;LINGXING&#xff09;是一款专业的一站式亚马逊管理系统&#xff0c;帮助卖家构建完整的数据化运营闭环。&#xff0c;致力于为跨境电商卖家提供精细化运营和业财一体化的解决方案。 官网&#xff1a;https://erp.lingxing.com 集简云无代码集成平台&…

四川思维跳动:抖店运营服务商的运营方案

抖店运营服务商&#xff0c;作为一种新兴的商业模式&#xff0c;正逐渐受到广大电商从业者的重视和青睐。抖店运营方案不仅可以帮助创业者快速进入电商行业&#xff0c;还可以为他们提供全方位的运营支持和服务。下面四川思维跳动小编就来详细介绍一下抖店运营服务商的优势和价…

防止重复提交请求

前景提要&#xff1a; ts 简易封装 axios&#xff0c;统一 API 实现在 config 中配置开关拦截器 axios 实现请求 loading 效果 用一个数组保存当前请求的 url&#xff0c;此时还未响应。如果再次发起同样请求&#xff0c;比对 url 发现已经存在数组中&#xff0c;则拦截请求&a…