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

专做专业课视频的网站网站布局策划的流程图

专做专业课视频的网站,网站布局策划的流程图,网站建设的目的包含哪些方面,推广竞价账户托管LeetCode105_从先序与中序遍历序列构造二叉树 标签:#树 #数组 #哈希表 #分治 #二叉树Ⅰ. 题目Ⅱ. 示例 0. 个人方法官方题解二:迭代 标签:#树 #数组 #哈希表 #分治 #二叉树 Ⅰ. 题目 给定两个整数数组 preorder 和 inorder ,其中…

LeetCode105_从先序与中序遍历序列构造二叉树

  • 标签:#树 #数组 #哈希表 #分治 #二叉树
    • Ⅰ. 题目
    • Ⅱ. 示例
  • 0. 个人方法
  • 官方题解二:迭代

标签:#树 #数组 #哈希表 #分治 #二叉树

Ⅰ. 题目

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

0. 个人方法

  • 先序:即(根、左、右)的排列方式;
  • 中序:即(左、根、右)的排列方式。

Q:要构造这颗二叉树,肯定要进行完整的遍历,那该如何遍历呢?
A:根结点肯定是一个重要的结点,我们可以以根结点为起点,通过递归,不断对左右子树进行搜索,并返回根结点,逐步构建成这颗二叉树。

  1. 首先观察先序遍历:根结点始终在最前面(这很好,方便我们递归时对根结点的操作),但是左、右子树的边界在先序中不明显,那怎么办呢?
  2. 这时我们再观察中序遍历:中序遍历中,根结点把左右子树分开了,所以我们可以通过在先序中得到的根结点,在中序遍历中找到它,这样就有左右子树的长度了,也可以返回去用到先序遍历中了。
  3. 递归:观察完先序和中序后,递归的写法就很明了了。题目只给了调用两个根结点的函数,这显然是不够用的,因为我们要对左右子树进行操作,所以先定义一个新函数,在新函数中进行递归。
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {return buildTreeRoot(preorder, 0, preorder.size()-1, inorder,  0, inorder.size()-1);}TreeNode* buildTreeRoot(vector<int>& preorder, int preStart, int preEnd,vector<int>& inorder,  int inStart,  int inEnd){// 0. 先写递归停止的条件if (preStart > preEnd || inStart > inEnd){return nullptr;}// 1. 从根结点开始,判断左右子树区间TreeNode* root = new TreeNode(preorder[preStart]);// 2. 找到中序遍历中的根结点int mid = 0;for (int i=inStart; i<=inEnd; i++){if (inorder[i] == preorder[preStart]){mid = i;break;}}// 3. 左子树的大小int leftsize = mid - inStart;root->left = buildTreeRoot(preorder, preStart+1, preStart+leftsize, inorder,  inStart,  mid-1);root->right = buildTreeRoot(preorder, preStart+leftsize+1, preEnd, inorder,  mid+1, inEnd);return root;}
};
  • 复杂度分析

    • 时间复杂度:O(n),其中 n 是树中的节点个数。

    • 空间复杂度:O(n),除去返回的答案需要的 O(n) 空间之外,我们还需要使用 O(n) 的空间存储哈希映射,以及 O(h)(其中 h 是树的高度)的空间表示递归时栈空间。这里 h<n,所以总空间复杂度为 O(n)。

官方题解二:迭代

  • 迭代法是一种非常巧妙的实现方法。

  • 对于前序遍历中的任意两个连续节点 u 和 v,根据前序遍历的流程,我们可以知道 u 和 v 只有两种可能的关系:

    • v 是 u 的左儿子。这是因为在遍历到 u 之后,下一个遍历的节点就是 u 的左儿子,即 v;

    • u 没有左儿子,并且 v 是 u 的某个祖先节点(或者 u 本身)的右儿子。如果 u 没有左儿子,那么下一个遍历的节点就是 u 的右儿子。如果 u 没有右儿子,我们就会向上回溯,直到遇到第一个有右儿子(且 u 不在它的右儿子的子树中)的节点 u_a,那么 v 就是 u_a 的右儿子。

class Solution {
public:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {if (!preorder.size()) {return nullptr;}TreeNode* root = new TreeNode(preorder[0]);stack<TreeNode*> stk;stk.push(root);int inorderIndex = 0;for (int i = 1; i < preorder.size(); ++i) {int preorderVal = preorder[i];TreeNode* node = stk.top();if (node->val != inorder[inorderIndex]) {node->left = new TreeNode(preorderVal);stk.push(node->left);}else {while (!stk.empty() && stk.top()->val == inorder[inorderIndex]) {node = stk.top();stk.pop();++inorderIndex;}node->right = new TreeNode(preorderVal);stk.push(node->right);}}return root;}
};

文章转载自:

http://uX4KIucq.hpkgm.cn
http://8i7HU0CT.hpkgm.cn
http://68egBVZa.hpkgm.cn
http://h1urAVt3.hpkgm.cn
http://92tdJj5n.hpkgm.cn
http://Pg1ifbtk.hpkgm.cn
http://K44GITM8.hpkgm.cn
http://Qb0VLs1h.hpkgm.cn
http://95toOOR5.hpkgm.cn
http://R9KBdN3c.hpkgm.cn
http://7tdZGo6C.hpkgm.cn
http://3zPYVIVv.hpkgm.cn
http://TLaJwzTn.hpkgm.cn
http://tDGPYLFy.hpkgm.cn
http://CU94CeGD.hpkgm.cn
http://4CIOKlRH.hpkgm.cn
http://X9g1lcgP.hpkgm.cn
http://J64A6grb.hpkgm.cn
http://CX0RQrzc.hpkgm.cn
http://DL5fkkA0.hpkgm.cn
http://attdCQVc.hpkgm.cn
http://lkXgHGZc.hpkgm.cn
http://WXqIvxLw.hpkgm.cn
http://ePJDrAxU.hpkgm.cn
http://mCr12bwx.hpkgm.cn
http://XRqn5vtW.hpkgm.cn
http://4WgDPuzD.hpkgm.cn
http://5qo9d6G1.hpkgm.cn
http://FAtUuSJn.hpkgm.cn
http://twjAefM8.hpkgm.cn
http://www.dtcms.com/wzjs/731084.html

相关文章:

  • 贵州国龙翔建设有限公司网站男通网站哪个好用
  • 热门的网站模板下载北京app搭建
  • python云服务器网站开发实例网站运营
  • 在线免费货源网站入口网站信息更新如何做
  • 外贸网站建设哪里做得好企业网站制作的软件
  • 贵州网站制作设计公司哪家好延边省建设局网站官网
  • 网站导航仿站西安短视频代运营
  • 如何建设网站建设现在做个网站要多少钱
  • 福建设备公司网站商丘建网站
  • 建一个多用户团购网站需要多少钱企业多语言网站开发
  • 北京做网站好公司新手做网站视频
  • 园林网站建设设计方案湖南长沙seo教育
  • 网站建设优化方法 s做安全题目是哪个网站
  • q网站建设智能营销型网站制作
  • 有哪些网站是cms北京优化生育
  • 英文网站建设 济南wordpress project
  • 济南网站开发公司排名邢台123生活最新帖子
  • wordpress背景自动变幻图形seo站长网怎么下载
  • 网站开发树形图重庆网站建设专家
  • 千万别去电商公司上班做seo推广网站在线咨询
  • 青岛网站建设多少钱重庆渝中区企业网站建设公司
  • 怎么.做网站镇江做网站需要多少钱
  • wordpress网站是什么意思宣传软文模板
  • 电商平台网站开发做视频搬运哪个网站最赚钱
  • 搜索引擎是网站吗wordpress怎么添加描述和关键词
  • 邯郸市教育考试院网站新遵义
  • 旅游网站建设的经济评价wordpress代码板插件
  • 百度做网站怎么样wordpress添加追番
  • 爱站长尾关键词挖掘工具[wordpress
  • 手机在线制作表白网站郑州网站制作的公司哪家好