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

外包加工平台小红书seo软件

外包加工平台,小红书seo软件,本地dedecms网站,湖南茶叶网站建设105. 从前序与中序遍历序列构造二叉树 文章目录 [105. 从前序与中序遍历序列构造二叉树](https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/)一、题目二、题解 一、题目 给定两个整数数组 preorder 和 inorder ,其中 preo…

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

文章目录

      • [105. 从前序与中序遍历序列构造二叉树](https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/)
        • 一、题目
        • 二、题解


一、题目

给定两个整数数组 preorderinorder ,其中 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]

提示:

  • 1 <= preorder.length <= 3000
  • inorder.length == preorder.length
  • -3000 <= preorder[i], inorder[i] <= 3000
  • preorderinorder无重复 元素
  • inorder 均出现在 preorder
  • preorder 保证 为二叉树的前序遍历序列
  • inorder 保证 为二叉树的中序遍历序列

二、题解

算法思路

我们要根据给定的前序遍历和中序遍历序列构建出一棵二叉树。前序遍历序列告诉我们根节点的值以及左子树和右子树的分割点,中序遍历序列告诉我们左子树和右子树的节点排列顺序。我们可以通过递归的方法来实现构建二叉树的过程。

具体步骤如下:

  1. 从前序遍历序列中取出第一个元素,它是当前子树的根节点的值。
  2. 在中序遍历序列中找到该根节点的值,根据这个值,将中序序列划分为左子树部分和右子树部分。
  3. 根据左子树和右子树的节点数量,在前序遍历序列中划分出左子树的前序序列和右子树的前序序列。
  4. 递归地构建左子树和右子树。

具体实现

class Solution {
public:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {// 基准情况:如果前序遍历序列为空,返回空指针表示空树if (preorder.size() == 0) {return nullptr;}// 创建当前子树的根节点TreeNode *root = new TreeNode();root->val = preorder[0];// 在中序遍历序列中找到根节点的位置int index = 0;for (index = 0; index < inorder.size(); index++) {if (inorder[index] == preorder[0]) {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());// 递归构建左子树和右子树root->left = buildTree(leftPreorder, leftInorder);root->right = buildTree(rightPreorder, rightInorder);return root;}
};

算法分析

  • 时间复杂度:在每次递归中,我们都需要遍历中序遍历序列来找到根节点的位置,这需要 O(n) 的时间,其中 n 是节点数量。递归的总时间复杂度取决于递归的层数以及每层的操作,因此总体时间复杂度为 O(n)。

  • 空间复杂度:每次递归都会创建新的前序和中序序列,空间复杂度主要取决于递归的深度,最坏情况下递归深度为 n,所以空间复杂度为 O(n)。此外,还需要存储二叉树节点的空间,所以总体空间复杂度也为 O(n)。

http://www.ds6.com.cn/news/13019.html

相关文章:

  • 如何利用fortran语言建设网站十大经典案例
  • 做网站需要的图片淘宝流量网站
  • 电商网站建设功能推广排名
  • 怎么做网站链接支付苏州吴中区seo关键词优化排名
  • dede大气黑色网站源码网络营销包括哪些
  • 网站文章可以做外链吗营销型网站建设怎么做
  • 做网站和app怎么跑业务企业网络推广计划
  • 郑州网站制作推广公司电商网站建设教程
  • dede网站源码 如何修改怎么去推广自己的店铺
  • 内蒙古网站建设流程网上教育培训机构排名
  • 网站建设经营范围怎么写电商营销
  • 域名评估价格平台seo整站优化更能准确获得客户
  • 在马来西亚做博彩网站合法吗seo学校培训班
  • 网站建设需要材料长春网站优化咨询
  • 一般网站的服务器宁波seo软件
  • 做网站赚钱多吗农大南路网络营销推广优化
  • 网站建设使用的技术google ads
  • 软件外包项目网站百度网址大全下载安装
  • 网站流量提升方法广州优化公司哪家好
  • 个人做网站seo南京百度seo
  • 网站建设和执纪监督百度seo排名规则
  • b2c网站服务内容今日十大热点新闻
  • wood怎么做网站结构图免费网站在线客服系统源码
  • 手机网站开发存储数据怎么做营销推广方案
  • 安徽专业网站制作公司手机在线制作网站
  • 中国菲律宾最新局势石家庄百度搜索引擎优化
  • 响应式网站费用培训机构不退费最有效方式
  • 静态网站怎么做优化宁波seo网络推广主要作用
  • 做网站困难吗全网推广外包公司
  • 网站集约化建设 要求宁波seo优化