首页 > 其他分享 >力扣-105-从前序与中序遍历序列构造二叉树/剑指Offer-07

力扣-105-从前序与中序遍历序列构造二叉树/剑指Offer-07

时间:2022-12-23 20:25:10浏览次数:51  
标签:preorder right 07 Offer int root 二叉树 inorder left

基本步骤是这样:

  1. 先看先序序列,可以确定根节点,然后在中序遍历中就可以将二叉树划成左子树和右子树两拨
  2. 对左右子树递归上述步骤

好像直到怎么遍历二叉树,却对怎么重建二叉树没什么经验
从上往下建还是从下往上建呢?又怎么和两个序列的访问结合起来呢?

递归写法

递归需要更新标明每次构建时,前序和中序的序列左右边界

class Solution {
private:
	unordered_map<int, int> index;

public:

	TreeNode* myBuildTree(const vector<int>& preorder, const vector<int>& inorder, int preorder_left, int preorder_right, int inorder_left, int inorder_right) {
		if (preorder_left > preorder_right) return nullptr;

		int preorder_root = preorder_left;// 前序根节点索引
		int inorder_root = index[preorder[preorder_root]];// 中序根节点索引

		TreeNode* root = new TreeNode(preorder[preorder_root]);

		int size_of_leftsub = inorder_root - inorder_left;

		root->left = myBuildTree(preorder, inorder, preorder_left + 1, preorder_left +size_of_leftsub, inorder_left, inorder_root - 1);
	
		root->right = myBuildTree(preorder, inorder, preorder_left + size_of_leftsub + 1, preorder_right, inorder_root + 1, inorder_right);


		return root;
	}

	TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
		int n = preorder.size();
		// 倒转索引和值的哈希映射,方便快速定位
		for (int i = 0; i < n; i++) index[inorder[i]] = i;
		return myBuildTree(preorder, inorder, 0, n - 1, 0, n - 1);
	}
};

迭代写法

标签:preorder,right,07,Offer,int,root,二叉树,inorder,left
From: https://www.cnblogs.com/yaocy/p/17001343.html

相关文章

  • 国产化EtherCAT主站控制器解决方案,米尔基于全志T507-H核心板
    EtherCAT是由德国BECKHOFF自动化公司于2003年提出的实时工业以太网技术。它具有高速和高数据有效率的特点,支持多种设备连接拓扑结构。其从站节点使用专用的控制芯片,主站使......
  • 国产化EtherCAT主站控制器解决方案,米尔基于全志T507-H核心板
    EtherCAT是由德国BECKHOFF自动化公司于2003年提出的实时工业以太网技术。它具有高速和高数据有效率的特点,支持多种设备连接拓扑结构。其从站节点使用专用的控制芯片,主站使用......
  • 07-MSF PAYLOAD模块
    1环境搭建Windowsserver2008R2Datacenter:192.168.5.128kalilinux:192.168.5.1362在kali上使用MSFPayload生成病毒生成1.exe病毒文件。msfvenom-pwindows/met......
  • Day07_02_分布式教程之集中式与分布式全方位优劣对比(转)
    集中式与分布式全方位优劣对比(转)一.应用现状比较由于历史原因,集中式架构多用于传统银行、电信等行业,主机资源集中在大型主机或小型机上.在集中式架构下,包括操作系统、......
  • Day07_05_分布式教程之分布式事务详解
    分布式事务详解一.分布式事务的概念随着分布式计算的发展,事务在分布式计算领域也得到了广泛的应用.在单机数据库中,我们很容易能够实现一套满足 ​​ACID​​ 特性的事......
  • Day10_07_RabbitMQ消息队列与Redis队列的对比
    RabbitMQ消息队列与Redis队列的对比本文仅针对RabbitMQ与Redis做队列应用时的情况进行对比具体采用什么方式实现,还需要取决于系统的实际需求.一.简要介绍1.RabbitMQRabbit......
  • SpringBoot2.x系列教程07--新纪元之Maven方式创建SpringBoot项目(掌握)
    SpringBoot系列教程07--新纪元之Maven方式创建SpringBoot项目(掌握)作者:一一哥一.Maven方式创建SpringBoot项目1.配置Maven环境在以maven方式创建SpringBoot项目之前,请先......
  • Kubernetes监控手册07-监控controller-manager
    写在前面controller-manager是Kubernetes控制面的组件,通常不太可能出问题,一般监控一下通用的进程指标就问题不大了,不过controller-manager确实也暴露了很多 ​​/metr......
  • AcWing341. 洛谷P1073, NOIP2009 最优贸易
    AcWing题目传送门洛谷题目传送门题目大意\(~~~~~~\)一个投机倒把的奸商想要通过城市不太健全的贸易系统坑点钱,任意城市都可以买入或者卖出水晶球,他想尽量在便宜的城市买......
  • P1507 NASA的食物计划
    P1507NASA的食物计划:航天飞机的体积有限,当然如果载过重的物品,燃料会浪费很多钱,每件食品都有各自的体积、质量以及所含卡路里。在告诉你体积和质量的最大值的情况下,请输......