通过层序遍历和中序遍历构建二叉树
通过层序遍历和中序遍历构建二叉树的过程与通过中序遍历和先序遍历构建二叉树的过程很相似。
先序遍历和中序遍历是通过先序遍历的首个元素确定根节点,再根据这个元素在中序遍历中出现的位置分为左子树和右子树,然后递归实现。
层序遍历和中序遍历构建二叉树的过程也可以进行仿照。
层序遍历中的首个元素在中序遍历中的位置会将中序遍历划分为左子树和右子树。左子树和右子树也会被层序遍历中的下一个元素继续划分。
#include<cstdio>
using namespace std;
struct TreeNode
{int val;TreeNode *lchild;TreeNode *rchild;
};//创造结构体
int midn;
const int maxn=100;
int mid[maxn]={0};
int layer[maxn]={0};
TreeNode * createbymidlayer(int midl,int midr)
{if(midl>midr)//边界条件归纳,若midl>midr,说明节点为空return NULL;int i,j;int flag=0;for(i=0;i<midn;i++){for(j=midl;j<=midr;j++)if(mid[j]==layer[i]){flag=1;break;}if(flag)break;}//两个for循环来确定中序遍历数组mid[midl,midr]中首个在层序遍历中出现的元素TreeNode *root=new TreeNode;root->val=layer[i];root->lchild=createbymidlayer(midl,j-1);//进行分治root->rchild=createbymidlayer(j+1,midr);return root;
}
void dfs(TreeNode *root)//先序遍历输出进行验证
{if(!root)return ;printf("%d",root->val);dfs(root->lchild);dfs(root->rchild);
}
int main()
{scanf("%d",&midn);for(int i=0;i<midn;i++)scanf("%d",&mid[i]);for(int i=0;i<midn;i++)scanf("%d",&layer[i]);TreeNode *root=new TreeNode;root=createbymidlayer(0,midn-1);dfs(root);return 0;}
/*
7
4 2 5 1 6 3 7
1 2 3 4 5 6 7*/
通过层序遍历和中序遍历构建二叉树相关推荐
- MFC二叉树可视化绘制 (C++)—— 插入、删除、先序遍历、中序遍历、后序遍历、层序遍历(基于平衡二叉树实现)
界面展示: 相关文章目录 平衡二叉树的构造过程图解 C/C++平衡二叉树实现 -- 插入.删除.先序遍历.中序遍历.后序遍历.层序遍历(设计详解) MFC 在对话框中绘制图形的方法 -- 及二叉树绘制 ...
- 通过前序遍历和中序遍历构建二叉树 python实现
前言 通过前序遍历和中序遍历构建二叉树的原理,主要是找前序遍历根节点在中序遍历中的位置,然后将二叉树而成左子树和右子树,然后依次进行这样的操作,思路还是比较简单的 代码 class Node:def ...
- 【7-10 PAT】树的遍历(给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。)
题干: 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 解题报告: dfs求出这棵树来,然后bfs求层序遍历就行了. AC代码: #include&l ...
- 根据二叉树先序遍历和中序遍历构建二叉树
前方有一个人在等着你,你只管勇敢的向前走 采用递归分治的思想,将一个大问题划分成子问题, 对于本题,根据二叉树先序遍历和中序遍历构建二叉树,思路: 我们可以求得根节点左子树的先序和中序序列,以及右子树 ...
- java根据前序和中序建树_Java实现根据前序遍历构建二叉树(前序遍历、中序遍历、后序遍历)...
Java实现根据前序遍历构建二叉树(前序遍历.中序遍历.后序遍历),Java关于ACM的代码真的好少,想参考如何用java实现二叉树googl 前言 Java关于ACM的代码真的好少,想参考如何用ja ...
- pta习题:给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。
5-6 树的遍历 分数 20 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一 ...
- JavaScript(JS)前序遍历,中序遍历,后序遍历,层序遍历,图文详解两种(递归与迭代)实现的方式
1.二叉树的前序遍历 前序遍历首先访问根结点然后遍历左子树,最后遍历右子树. 在遍历左.右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树. 若二叉树为空则结束返回,否则: (1)访问根结点. ...
- Java实现前序遍历,中序遍历,后序遍历,层序遍历
1.遍历思想 前序遍历首先访问根节点,然后访问左子树,最后访问右子树. 中序遍历先访问左子树,然后访问根节点,最后访问右子树. 后续遍历先访问左子树,然后访问右子树,最后访问根节点. 层序遍历则是从上 ...
- 数据结构之二叉树的前序遍历、中序遍历、后序遍历、层序遍历
一.二叉树的遍历概念 二叉树的遍历是指从根结点触发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次. (1). 前(先)序遍历 前序遍历:若二叉树为空,则空操作返回,否则先 ...
最新文章
- ps混合模式glsl代码
- 基于Kubernetes1.20.1版本开发调试环境搭建
- 利用注入写Webshell(sql-lab第七关)
- Qt-5种布局控件详解
- java设计单词英译汉小助手_拣单词|第八期第3天:第521528个单词宝藏
- 使用python3连接hiveserver2的方法
- Gtk-WARNING : cannot open display----这个问题在NVIDIA TX2上碰到过就是DISPLAY=“:0“
- html5 js打开新页面,JavaScript实现按Ctrl键打开新页面_javascript技巧
- 大学竞赛经历分享之微信小程序应用开发赛(1)
- python输出奇数个数_Python实践|输出0-7组成八位奇数总数
- 小白刷LeeCode(算法篇)3
- 康考迪亚大学应用计算机科学,康考迪亚大学计算机
- window下xmind-pro-8破解版
- ACCESS集团引领健康风潮,稀缺原料和领先科技帮助品牌在大健康产业乘风破浪
- pd对焦速度_自动对焦速度是由相机还是镜头决定的?
- Dlink DIR-615L 和 Mercury MW300R WDS 应用举例
- 电商让客户等待的话术
- iOS开发UI篇—ios应用数据存储方式(偏好设置)
- android studio 配置HTTP proxy
- MFC属性页CPropertySheet的使用