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

深圳市门户网站建设福州网站建设fjfzwl

深圳市门户网站建设,福州网站建设fjfzwl,网站手机验证码怎么做,深圳市易百讯科技有限公司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.15wanjia.com/news/191995.html

相关文章:

  • 山东建设银行官网网站推广平台网站制作
  • 纯html5 网站刷推广链接
  • 垣宝建设工程集团网站做一个同城app得多少钱
  • 免费网站开发合同wordpress主题背景图
  • 重庆网站建设夹夹虫公司网站建设图片
  • 做网站前景怎样百度账号一键登录
  • 网站上投放广告wordpress 去掉底部
  • 护肤品网站建设的摘要DW做的网页用网站打不开
  • 深圳高端网站建设创新如何做网站在售产品分析
  • 梅林关网站建设网站建设的三网合一
  • 公众号微信网站开发公司广告推广方案
  • 网站建设涉及的知识产权做网站要怎么备案
  • 创建网站首页时通常取文件名为个人主页在哪里找
  • 做网站用小型机或服务器wordpress域名资源地址
  • 通化公司做网站邮箱账号做网站用户名好不好
  • 温州网站建设方案开发邵阳建设网站的公司
  • 黑彩网站开发装修网站是怎么建设的
  • 非常成功的网站营销方案流程
  • 怎么提交网站怎么设计网页主页
  • 网站被挂黑链了网站和手机网站
  • 网站地区分站系统三维网站是怎么做的
  • 动漫人物做羞羞事的网站佛山网站推广经理
  • 整站seo排名wordpress主题恢复
  • 网站备案表格下载小说网站自动采集
  • 深圳网站备案注销网络建设包括哪些内容
  • 188旅游网站源码成都食品网站开发
  • iis网站属性怎么打开学编程入门先学什么
  • 怎么更换网站模板高端终端网站设计类网站
  • nodejs可以做网站么网络销售好干吗
  • 交做网贷的网站国际新闻最新消息今天乌克兰与俄罗斯