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

专业网站优化案例上海网站设计公司

专业网站优化案例,上海网站设计公司,网站icp备案 技术负责人,注册深圳公司恒诚信流程一、⼆叉树的定义 ⼆叉树是⼀种特殊的树型结构,它的特点是每个结点⾄多只有2棵⼦树(即⼆叉树中不存在度⼤于2的结点),并且⼆叉树的⼦树有左右之分,其次序不能任意颠倒。 ⼆叉的意思是这种树的每⼀个结点最多只有两个孩…

一、⼆叉树的定义

⼆叉树是⼀种特殊的树型结构,它的特点是每个结点⾄多只有2棵⼦树(即⼆叉树中不存在度⼤于2的结点),并且⼆叉树的⼦树有左右之分,其次序不能任意颠倒。
⼆叉的意思是这种树的每⼀个结点最多只有两个孩⼦结点。注意这⾥是最多有两个孩⼦,也可能没有孩⼦或者是只有⼀个孩⼦。
注意:⼆叉树结点的两个孩⼦,⼀个被称为左孩⼦,⼀个被称为右孩⼦。其顺序是固定的,就像⼈的左⼿和右⼿,不能颠倒混淆。

满⼆叉树
⼀棵⼆叉树的所有⾮叶⼦节点都存在左右孩⼦并且所有叶⼦节点都在同⼀层上,那么这棵树就称为满⼆叉树。

完全⼆叉树
对⼀棵树有n 个结点的⼆叉树按层序编号,所有的结点的编号从1 ∼ n。如果这棵树所有结点和同
样深度的满⼆叉树的编号为从1 ∼ n 的结点位置相同,则这棵⼆叉树为完全⼆叉树。说⽩了,就是在满⼆叉树的基础上,在最后⼀层的叶⼦结点上,从右往左依次删除若⼲个结点,剩下的就是⼀棵完全⼆叉树。

二、⼆叉树的存储


在《树》的章节中,已经学过树的存储,⼆叉树也是树,也是可以⽤vector数组或者链式前向星来存储。仅需在存储的过程中标记谁是左孩⼦,谁是右孩⼦即可。
• ⽐如⽤vector数组存储时,可以先尾插左孩⼦,再尾插右孩⼦;
• ⽤链式前向星存储时,可以先头插左孩⼦,再头插右孩⼦。只不过这样存储下来,遍历孩⼦的时候先遇到的是右孩⼦,这点需要注意。
但是,由于⼆叉树结构的特殊性,我们除了⽤上述两种⽅式来存储,还可以⽤符合⼆叉树结构特性的⽅式:分别是顺序存储和链式存储。

主要讲一下链式存储

因此我们可以创建两个数组l[N],r[N] ,其中l[i] 表⽰结点号为 的结点的左孩⼦编号, r[i] 表⽰结点号为 的结点的右孩⼦编号。这样就可以把⼆叉树存储起来。

#include <iostream>
using namespace std;
const int N = 1e6 + 10;
int n;
int l[N], r[N];
int main()
{cin >> n;for(int i = 1; i <= n; i++){// 存下 i 号结点的左右孩⼦ cin >> l[i] >> r[i];}return 0;
}

三、⼆叉树的遍历

深度优先遍历

不同于常规树的深度优先遍历,⼆叉树因其独特的性质可以划分成三种深度优先遍历:先序遍历,中
序遍历,和后序遍历。其中,三种遍历⽅式的不同在于处理根节点的时机。
对于⼀棵⼆叉树⽽⾔,整体可以划分成三部分:根节点+左⼦树+右⼦树:
• 先序遍历的顺序为:根+左+右;
• 中序遍历的顺序为:左+根+右;
• 后序遍历的顺序为:左+右+根。

#include <iostream>
using namespace std;
const int N = 1e6 + 10;
int n;
int l[N], r[N];
void dfs1(int p)
{if(p == 0) return;// 先处理根节点 cout << p << " ";// 左⼦树 dfs1(l[p]);// 右⼦树 dfs1(r[p]);
}
void dfs2(int p)
{if(p == 0) return;dfs2(l[p]);cout << p << " ";dfs2(r[p]);
}
void dfs3(int p)
{if(p == 0) return;dfs3(l[p]);dfs3(r[p]);cout << p << " ";
}
int main()
{cin >> n;for(int i = 1; i <= n; i++){cin >> l[i] >> r[i];}dfs1(1); // 先序遍历 cout << endl;dfs2(1); // 中序遍历 cout << endl;dfs3(1); // 后序遍历 cout << endl;return 0;
}

宽度优先遍历

#include <iostream>
#include <queue>
using namespace std;
const int N = 300;
int n;
int l[N], r[N];
void bfs()
{queue<int> q;q.push(1);while(q.size()){auto p = q.front(); q.pop();cout << p << " ";// 左右孩⼦⼊队 if(l[p]) q.push(l[p]);if(r[p]) q.push(r[p]);}cout << endl;
}
int main()
{cin >> n;for(int i = 1; i <= n; i++){cin >> l[i] >> r[i];}bfs();return 0;
}

http://www.dt0577.cn/news/52390.html

相关文章:

  • 数码网站建设维护网站制作策划
  • 做b2b网站的公司杭州明开seo
  • 高端网站案例营销软文小短文
  • 技能培训中心网站建设百度首页广告多少钱
  • 专业北京网站建设公司排名全国疫情最新消息今天实时
  • 深圳网站建设合同网站推广文章
  • wordpress二次元 插件资源优化网站排名
  • 教育类网站怎么做优化网络营销课程大概学什么内容
  • 寻找石家庄网站建设郑州聚商网络科技有限公司
  • 做网站的策划需要做什么百度公司在哪
  • wordpress怎么编辑的给你一个网站怎么优化
  • 自己做返利网站吗24小时免费看的视频哔哩哔哩
  • 建筑网人才抖音seo怎么做
  • 织梦如何做网站地图上海网站seo诊断
  • 敦煌网站外引流怎么做百度网络营销中心app
  • 宁金诚信建设网站3000块钱在朋友圈投放广告
  • 蓝色清新phpcms企业网站模板游戏优化软件
  • icp ip 网站备案百度网盘客服人工电话95188
  • 营销型网站建设制作多少钱网络营销有哪些主要功能
  • Wordpress源码下载站杭州网站优化企业
  • 网站开发app小程序站长工具忘忧草社区
  • 网站所有者是什么意思优化大师卸载不了
  • 潍坊网站建设优化广东疫情最新资讯
  • sem和seo的工作湖南专业的关键词优化
  • 万户网络做网站怎么样企业网络营销的模式有哪些
  • pc网站建设需要提供哪些资料百度竞价排名官网
  • 凡科网站怎么修改昨天做的网站百度云群组
  • wordpress怎么建设网站seo的流程是怎么样的
  • 备案用网站建设方案书新手20种引流推广方法
  • 腾讯云电商网站建设教育培训排行榜前十名