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

重庆开县网站建设公司企业官网搭建

重庆开县网站建设公司,企业官网搭建,WordPress移动端加搜索框,小制作小发明小论文重建二叉树一、递归法二、迭代法题目链接 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 示例 1: Input: preorder [3,9,20,15,7], inorder [9,3,15,…

重建二叉树

  • 一、递归法
  • 二、迭代法

题目链接

题目描述:
输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

示例 1:
在这里插入图片描述

Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output: [3,9,20,null,null,15,7]

示例 2:

Input: preorder = [-1], inorder = [-1]
Output: [-1]

一、递归法

首先我们知道中序的左边就是该节点的左子树,中序的右边就是该节点的右子树,而确认根的顺序就需要靠前序。
在这里插入图片描述
所以我们可以用一个变量pi记录前序遍历的位置,在中序中找到相同的元素,然后把它的左右区间递归下去。
这里注意如果要每次递归都需要遍历中序找到根,时间复杂度过高,所以我们可以在递归前先用哈希表映射根的位置

代码如下

class Solution {
public:unordered_map<int, int> index;TreeNode* _bulidTree(vector<int>& pre, vector<int>& in, int& pi, int begin, int end){if (begin > end) return nullptr;int mid = index[pre[pi]];TreeNode* root = new TreeNode(pre[pi++]);root->left = _bulidTree(pre, in, pi, begin, mid - 1);root->right = _bulidTree(pre, in, pi, mid + 1, end);return root;}TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {int pi = 0;for (int i = 0; i < preorder.size(); i++){index[inorder[i]] = i;}return _bulidTree(preorder, inorder, pi, 0, preorder.size() - 1);}
};

二、迭代法

三种顺序的迭代法遍历:【数据结构】二叉树的非递归遍历

我们先假象一种情况,一棵树只有左子树的话,那么就相当于是一个单链表,那么它的前序遍历和中序遍历就刚好是反过来的。那么我们就可以使用栈来逆序存放,一旦遍历到最左下节点,这时候就该返回,开始弹栈,当我们发现弹栈的顺序和中序遍历不一致的时候,说明最后一个弹出来的节点有右子树
在这里插入图片描述
可以发现前序走完后出栈顺序刚好是中序遍历的结果,所以没有右子树。

在这里插入图片描述在这里插入图片描述
代码如下:

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

相关文章:

  • 珠海网站建设 科速百度站长工具seo查询
  • 温州龙湾网站建设百度的网站网址
  • 微网站建设难不难网店推广策划方案
  • 黄骅市做网站ip子域名大全
  • 自己做的网站验证码出不来怎么快速排名优化推广价格
  • 商务网站建设作业网站链接交易
  • wordpress会员文章内容苏州seo关键词优化外包
  • 【从零开始实现stm32无刷电机FOC】【硬件】预驱电机芯片是什么,为啥叫“预驱”
  • 上海十大国企优化大师win10
  • 如何做招聘网站app拉新推广平台有哪些
  • 用阿里云和大淘客做网站百度提交网站的入口地址
  • 杭州专业做网站的怎么制作个人网页
  • 广东智能网站建设质量保障网络新闻发布平台
  • 属于网站开发工具的是什么是百度竞价推广
  • 成都网站建设与推广大连seo关键词排名
  • 家装设计理念石家庄seo网络推广
  • 学校网站做几级等保网站seo价格
  • 网站后台的作用网站设计服务企业
  • 图网搜索引擎优化的核心本质
  • 工厂做网站有用吗免费软文发布平台有哪些
  • 建设网站的公司广州免费推广途径与原因
  • 互利互通网站建设网络营销学院
  • 北京做网站的网络公司类似凡科建站的平台
  • 子域名wordpress伪静态宝鸡seo优化
  • 网络营销网站建设方案seovip培训
  • 展示型网站设计案例百度服务热线
  • 网站上的弹框如何做网页网络营销和传统营销的区别和联系
  • 无锡电子商务网站制作大数据营销软件
  • 如何建设网站挣钱百度手机提高关键词排名
  • 贵阳做网站kuhugz广点通