代码随想录_二叉树_leetcode105 106

news2025/1/31 3:10:04

leetcode105. 从前序与中序遍历序列构造二叉树

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

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

示例 1:

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

示例 2:

输入: preorder = [-1], inorder = [-1]
输出: [-1]

 代码

// leetcode105. 从前序与中序遍历序列构造二叉树
// 递归回溯
class Solution {
public:
	TreeNode* traversal(vector<int>& preorder, vector<int>& inorder)
	{
		int size = preorder.size();
		if (size == 0)
		{
			return nullptr;
		}
		TreeNode* cur = new TreeNode(preorder[0]); //确定根结点

		int index = 0;
		for (index = 0; index < size; index++)
		{
			if (inorder[index] == cur->val)
			{
				break;
			}
		}

		// 左子树的前序序列和中序序列
		vector<int> leftPreorder(preorder.begin() + 1, preorder.begin() + index + 1);
		vector<int> leftInorder(inorder.begin(), inorder.begin() + index);

		// 右子树的前序序列和中序序列
		vector<int> rightPreorder(preorder.begin() + index + 1, preorder.end());
		vector<int> rightInorder(inorder.begin() + index + 1, inorder.end());

		cur->left = traversal(leftPreorder, leftInorder);
		cur->right = traversal(rightPreorder, rightInorder);
		return cur;
	}

	TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
		return traversal(preorder, inorder);
	}
};

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

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

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

示例 1:

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

示例 2:

输入:inorder = [-1], postorder = [-1]
输出:[-1]

 代码


// leetcode 106. 从中序与后序遍历序列构造二叉树
// 递归
class Solution {
public:
	TreeNode* traversal(vector<int> inorder, vector<int> postorder)
	{
		int size = inorder.size();
		if (size == 0)
		{
			return nullptr;
		}
		TreeNode* cur = new TreeNode(postorder[size - 1]); //找到根结点
		if (size == 1)
		{
			return cur;
		}
		int index = 0; //从前序遍历中找到根节点 然后分割左右子树
		for (index = 0; index < size; index++)
		{
			if (inorder[index] == cur->val)
			{
				break;
			}
		}

		// 左子树的中序序列和后续序列
		vector<int> leftInorder(inorder.begin(), inorder.begin() + index);
		vector<int> leftPostorder(postorder.begin(), postorder.begin() + index);

		// 右子树的中序序列和后续序列
		vector<int> rightInorder(inorder.begin() + index + 1, inorder.end());
		vector<int> rightPostorder(postorder.begin() + index, postorder.end() - 1);

		cur->left = traversal(leftInorder, leftPostorder);
		cur->right = traversal(rightInorder, rightPostorder);
		return cur;
	}

	TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
		return traversal(inorder, postorder);
	}
};

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

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

相关文章

android sdl编译

SDL&#xff08;Simple DirectMedia Layer&#xff09;是一套开放源代码的跨平台多媒体开发库&#xff0c;使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数&#xff0c;让开发者只要用相同或是相似的代码就可以开发出跨多个平台。 1 下载SDL源码 http://www.libsd…

后缀数组的应用:最长公共子串

题目描述 假设 str1 长度为 N N N&#xff0c;str2 长度为 M M M&#xff0c;求 str1 和 str2 的最长公共子串。 思路分析 示例&#xff1a;str1 “12abcd456”, str2 “7abcd89”&#xff0c;则str1和str2的最长公共子串为 abcd。 注意&#xff0c;子串是连续的。 动…

二叉搜索树专题

二叉搜索树专题 特性篇LeetCode 230. 二叉搜索树中第K小的元素解题思路代码实现LeetCode 538. 把二叉搜索树转换为累加树解题思路代码实现 基操篇LeetCode 98. 验证二叉搜索树解题思路代码实现LeetCode 700. 二叉搜索树中的搜索代码实现LeetCode 701. 二叉搜索树中的插入操作解…

总结826

学习目标&#xff1a; 4月&#xff08;复习完高数18讲内容&#xff0c;背诵21篇短文&#xff0c;熟词僻义300词基础词&#xff09; 学习内容&#xff1a; 高等数学&#xff1a;复习12讲二元积分&#xff0c;第12讲习题&#xff0c;做了17道题 英语&#xff1a;早上背单词&am…

CAXA 3D 实体设计2020 caxa电子图板2020 64位/32位 详细安装方法

CAXA实体设计2016是国内软件公司根据美国最新的专利技术和多年在CAD/CAM领域积累的经验打造的专业3D模型设计软件&#xff0c;具有国际先进水平&#xff0c;支持创新模式和工程模式。创新模式将可视化自由设计与精准设计相结合&#xff0c;使产品设计跨越了传统参数化CAD软件的…

PHP项目——外卖点餐系统后台管理解析

项目介绍 系统基于总部多门店的连锁模式&#xff0c;拥有门店独立管理后台&#xff0c;支持总部定价和门店定价、LBS定位点餐&#xff0c;可堂食可外卖&#xff0c;适用于茶饮的外卖点餐场景&#xff0c;搭建自己的一点点、奈雪、喜茶点餐系统。 平台后台 1.商品 对门店总商…

取消调休?这个公司好像知道员工要什么...

今年的五一小长假3天变5天&#xff0c;比以往多2天&#xff0c;但是为了多出来的这两天&#xff0c;前一个周末的周日&#xff0c;也就是本周的周日4月23日&#xff0c;要正常上班一天。 五一回来后的5月6日&#xff0c;也就是回来后的那个周六&#xff0c;也要上班&#xff0…

无线蓝牙耳机哪款音质好?目前音质最好的无线蓝牙耳机推荐

现如今&#xff0c;蓝牙耳机已经是一个非常实用且常见的数码产品了&#xff0c;不少人喜欢戴着蓝牙耳机听歌&#xff0c;玩游戏。一款音质好的蓝牙耳机不止能听个响&#xff0c;还能给人极致的听觉享受。在此&#xff0c;我来给大家分享几款目前音质最好的无线蓝牙耳机&#xf…

命令执行漏洞概述

命令执行漏洞概述 命令执行定义命令执行条件命令执行成因命令执行漏洞带来的危害远程命令执行漏洞相关函数assert()preg_replace()call_user_func() a ( a( a(b)可变函数远程命令执行漏洞的利用系统命令执行漏洞相关函数system()exec()shell_exec()passthru&#xff08;&#x…

网络请求实战-实战Fetch和Promise相关的架构

目录 Promise神器&#xff08;承诺&#xff09; PromiseCoding示例 Promise常见用法 简单的promise Fetch的基本用法 fetch Fetch基本用法 FetchPromise场景举例 小结 Promise神器&#xff08;承诺&#xff09; PromiseCoding示例 代表异步求值的过程和结果 promise…

搭建Spark Standalone集群

文章目录 一&#xff0c;Spark Standalone架构&#xff08;一&#xff09;client提交方式&#xff08;二&#xff09;cluster提交方式 二&#xff0c;Spark集群拓扑三&#xff0c;前提条件&#xff1a;安装配置了分布式Hadoop环境四&#xff0c;在master虚拟机上安装配置Spark&…

SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈(nacos)

Nacos注册中心 &#xff08;一&#xff09;认识和安装Nacos 1、认识Nacos 2、安装nacos 这里下载1.4.1版本 默认端口是8848 下载解压后&#xff0c;终端进入到nacos/bin下&#xff0c;bash startup.sh -m standalone 然后查看start.out文件得到一个网址就可以查看nacos的服…

《Android 移动应用基础教程(Android Studio)(第2版)》【课本习题】【学习通2023春PDF】【参考答案】

文章目录 超星学习通智能终端软件开发&#xff08;基于Android Studio环境&#xff09;章节作业&#xff08;39&#xff09;第一章第二章 Android常见界面布局第三章 Android常见界面控件第四章第五章第六章&#xff08;略&#xff09;第七章第八章第九章第十章第十一章第十二章…

ChatGPT常见问题,Access denied的解决办法

今天&#xff0c;突然想登录一登录ChatGPT&#xff0c;提示 Access denied, You do not have access to chat.openai.com 怎么办&#xff1f; “Access denied You do not have access to chat.openai.com. The site owner may have set restrictions that prevent you from ac…

leetcode142. 环形链表 II

给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数…

vue3+electron开发桌面软件(7)——修改注册表,创建级联菜单

系列文章目录 系列第一篇&#xff1a; vue3electron开发桌面软件入门与实战&#xff08;0&#xff09;——创建electron应用 文章目录 系列文章目录前言一、创建右键级联菜单二、了解注册表结构1.手动添加注册表——一级菜单2.手动添加注册表——二级菜单父菜单3.手动添加注册…

IC-14W网络IC卡读写器_银河麒麟桌面操作系统V10适配测试报告

银河麒麟操作系统产品NeoCertify 认证测试报告 系统版本&#xff1a;银河麒麟桌面操作系统V10 厂商名称&#xff1a; 广州荣士电子有限公司 认证产品&#xff1a;IC-14W网络IC卡读写器 测试日期&#xff1a; 2022-11-04 …

基于SVG的HMI组件

人机界面是自动化领域不可或缺重要组成部分。人机界面系统的设计看上去并没有太大的技术门槛&#xff0c;但是设计一个HMI系统的工作量是巨大的&#xff0c;如果你没有足够的耐心和精力是难以完成一个通用HMI系统的。构建UI控件库就是一个似乎永远完不成的事情&#xff0c;用户…

12.基于蒙特卡洛抽样的电动汽车充电负荷计算

说明书 MATLAB代码&#xff1a;基于蒙特卡洛抽样的电动汽车充电负荷计算 关键词&#xff1a;电动汽车 蒙特卡洛模拟 抽样 充放电负荷 参考文档&#xff1a;《主动配电网多源协同运行优化研究_乔珊》第3.2节&#xff0c;完全复现 仿真平台&#xff1a;MATLAB 优势&#xf…

JavaWeb——IO、存储、硬盘、文件系统相关常识

目录 一、IO 1、定义 二、存储和硬盘 1、存储 2、硬盘 三、文件系统 1、文件 &#xff08;1&#xff09;、定义 &#xff08;2&#xff09;、分类 &#xff08;3&#xff09;、操作 2、树形结构和目录 3、路径 &#xff08;1&#xff09;、定义 &#xff08;2&…