dedecms 网站访问量有经验的网站建设推广

diannao/2026/1/25 20:47:57/文章来源:
dedecms 网站访问量,有经验的网站建设推广,我想做电商,深圳百度竞价推广#x1f970;作者: FlashRider #x1f30f;专栏: 初阶数据结构 #x1f356;知识概要#xff1a;详解二叉树的概念、二叉树的遍历、以及代码实现。 目录 树的基本概念 树的存储结构与二叉树的实现 树的存储 什么是二叉树 二叉链存储二叉树 二叉树的代码实现 树的基本… 作者: FlashRider 专栏: 初阶数据结构 知识概要详解二叉树的概念、二叉树的遍历、以及代码实现。 目录 树的基本概念 树的存储结构与二叉树的实现 树的存储 什么是二叉树 二叉链存储二叉树 二叉树的代码实现 树的基本概念 我们说的树是一种非线性的数据结构它是由n(n0)个有限结点组成的具有层次关系的集合。 因为外形看起来像是一棵根朝上叶朝下的倒挂的树所以我们把它称作树。 注意子树不能有交集否则就不是树形结构即每个节点只能有一个父节点。 一些术语 节点的度一个节点含有的字数个数。 叶节点度为0的节点。 非叶节点/分支节点度不为0的节点。 父/双亲节点有子树的节点。 子节点有父节点的节点。 兄弟节点具有相同父节点的节点。 树的度整个树中节点的度取最大值。 节点的层次从根节点为第一层开始依次往下递增。 树的高度节点的最大层次。 祖先从根节点到该节点所经过的分支上所有的节点。 森林由m(m0)棵互不相交的树组成的集合。 树的图示 注树的节点存储什么样的数据根据情况而议图中使用字母表示节点只是为了方便。 树的存储结构与二叉树的实现 树的存储 我们可以观察一下树的结构首先对于每一个父节点来说它都有至少一个子节点如果有多个兄弟我们可以都看作兄弟节点。对于没有子节点或兄弟节点的节点我们可以把它的子节点或兄弟节点看作空。 因此我们可以发现任意节点都可以这么表示子节点兄弟节点。 字节点存储它的第一个儿子兄弟节点存储它的兄弟。这样根据一个儿子的兄弟节点就可以遍历所有的儿子而根据子节点又可以继续往深处找。 typedef int DataType;//树的数据类型 typedef struct TreeNode { struct Node* _child; //第一个孩子 struct Node* _brother; //自己的兄弟DataType _data; //节点内存的数据 }TNode; 而对于我们目前而言研究一些特殊的树就可以了而树中比较典型的一种就是二叉树。 什么是二叉树 二叉树是一种树的结点的有限集合该集合满足两个性质 1. 可以为空。 2. 由一个根加上左右两颗子树组成。 对于途中的结点2来说它的右子树为空对于3、5、6来说左右子树都为空但也满足二叉树的性质。因此这棵树是一颗二叉树。 完全二叉树 除了最后一层叶子结点可以不用铺满其他每一层的结点都必须满足最大值。比如上图中的第一层和第二层都满足结点为最多第三层叶子节点最多为4个但只有3个因为叶子节点不用满足铺满所以上图是一个完全二叉树。 满二叉树 每一层的结点都为最大值即每一层结点都铺满。满二叉树是一种特殊的完全二叉树。 二叉树的一些性质 1. 若根节点层次为1则一颗非空二叉树第i层最多有2的i-1次方。 2. 若根节点层次为1则深度为h的二叉树最大结点数为2的h次方-1。 3. 对于任何一颗二叉树如果度为0的叶节点个数为n0 则度为2的分支结点个数为n2则满足 n0 n2 1。 4. 若根节点层次为1则有n个结点的满二叉树深度为h log2(n1)    以2为底 n1为对数。 5. 如果从上到下从左到右根结点为0开始编号对于结点 i 则         5.1 若 i 不为0则(i-1)/2为父节点.         5.2 若2i1n 则2i1为左孩子。否则无左孩子。         5.3 若2i2n 则2I2为右孩子。否则无右孩子。 二叉链存储二叉树 我们可以使用链式结构存储二叉树。 typedef int DataType;//数据类型 typedef struct BinaryTreeNode {struct BinaryTreeNode* _left;//左孩子struct BinaryTreeNode* _right;//右孩子DataType _data;//数据 }BTNode; 三叉链 如果使用三叉链存储二叉树那么就多一个指向父亲的指针可以快速找到父节点在某些需要频繁找父节点的情况下可以使用。 typedef int DataType;//数据类型 typedef struct BinaryTreeNode {struct BinaryTreeNode* _parent;//父节点struct BinaryTreeNode* _left;//左孩子struct BinaryTreeNode* _right;//右孩子DataType _data;//数据 }BTNode; 二叉树的代码实现 有了前面的知识我们已经明白二叉树的结构是怎样的了那么我们可以考虑如何创建二叉树的节点其实也很简单和链表节点类似malloc一个新节点出来并存储数据就行了而二叉树节点的创建与链接我们一般用递归实现这里就不再赘述我们就直接手动连接。 #include stdio.h #include assert.h #include stdlib.h #include stdbool.h //二叉树结构 typedef int BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTreeNode* left;struct BinaryTreeNode* right; }BTNode; //创建一个节点 BTNode* BuyNode(BTDataType x) {BTNode* newnode (BTNode*)malloc(sizeof(BTNode));if (newnode NULL){perror(malloc fail);return NULL;}newnode-data x;newnode-left newnode-right NULL;return newnode; } //手动链接一颗二叉树 BTNode* CreatBinaryTree() {BTNode* node1 BuyNode(1);BTNode* node2 BuyNode(2);BTNode* node3 BuyNode(3);BTNode* node4 BuyNode(4);BTNode* node5 BuyNode(5);BTNode* node6 BuyNode(6);node1-left node2;node1-right node4;node2-left node3;node4-left node5;node4-right node6;return node1; } 二叉树的遍历 二叉树的遍历分为前序中序后序三种而这三种的区别就是根节点在前还是在后。 遍历顺序为左子树根节点右子树。 左根右因此是中序遍历。以此类推。 而我们可以使用递归非常简单的去实现这三种遍历因为树本身就是一种递归结构。 如果当前节点为空代表不需要再递下去了就return如果不为空代表可以继续递左右子树因此看遍历需求考虑先递再打印还是先打印再递。 //前序遍历 根 左 右 void PrevOrder(BTNode* bt) {if (bt NULL){printf(N );return;}printf(%d , bt-data);PrevOrder(bt-left);PrevOrder(bt-right); } //中序遍历 左 根 右 void InOrder(BTNode* bt) {if (bt NULL){printf(N );return;}PrevOrder(bt-left);printf(%d , bt-data);PrevOrder(bt-right); } //后序遍历 左 右 根 void PostOrder(BTNode* bt) {if (bt NULL){printf(N );return;}PrevOrder(bt-left);PrevOrder(bt-right);printf(%d , bt-data); } 一些简单常见的操作 对于一颗二叉树我们也许会求它的高度或结点个数这些该怎么做呢 对于求结点个数来说我们也可以使用递归思想分治思想一棵树的结点个数等于左子树节点数右子树节点数根结点因此sum left right 1对于这棵树的每一颗子树我们都可以这么想因此代码就显而易见了。求叶子结点个数也很简单只要一个树左右子树都为空则就是叶结点了在求结点个数的基础上改一改就行。 对于求高度来说我们也可以递归一棵树的高度为左右子树高度的最大值加上本身这一层。即h max(左子树高度右子树高度) 1。 //求结点个数 int BTreeSize(BTNode* bt) {if (bt NULL) return 0;return BTreeSize(bt-left) BTreeSize(bt-right) 1; } //求叶结点个数 int BLeafSize(BTNode* bt) {if (bt NULL)return 0;if (bt-left NULL bt-right NULL)return 1;return BLeafSize(bt-left) BLeafSize(bt-right); } //求树的高度 int BTreeHeight(BTNode* bt) {if (bt NULL)return 0;int left BTreeHeight(bt-left);int right BTreeHeight(bt-right);return left right ? left 1 : right 1; } 一些常见操作 求树的第k层的结点个数因为这个问题指定了求哪一层所以我们拿一个变量k来存储剩余层数当k减到1时代表就是第k层了。 查找值为x的结点也是用一个变量存储x如果当前结点的data前提是结点不为空为x就可以返回当前结点否则返回左子树右子树中递归查找结果不为空的那一个。 //求树第k层的结点个数 int BinaryTreeLevelKSize(BTNode* bt, int k) {assert(k 0);if (k 1)return 1;if (bt NULL)return 0;return BinaryTreeLevelKSize(bt-left, k - 1) BinaryTreeLevelKSize(bt-right, k - 1); } //二叉树查找值为x的结点 BTNode* BTreeFind(BTNode* root, BTDataType x) {if (root NULL)return NULL;if (root-data x)return root;BTNode* r1 BTreeFind(root-left, x);if (r1) return r1;BTNode* r2 BTreeFind(root-right, x);if (r2) return r2;return NULL;//if (r1 NULL r2 NULL)// return NULL;//if (r1 NULL) return r2;//else return r1; } 二叉树的基本知识点就差不多到这了接下来我们就可以调试代码了。 //求前中后序遍历并打印二叉树的结点/叶结点个数以及高度 int main() {BTNode* root CreatBinaryTree();PrevOrder(root);printf(\n);InOrder(root);printf(\n);PostOrder(root);printf(\n);printf(%d\n, BTreeSize(root));printf(%d\n, BLeafSize(root));printf(%d\n, BTreeHeight(root));return 0; } 当然为了避免内存泄漏记得要销毁二叉树噢。 //二叉树的结点空间释放 void BTreeDestroy(BTNode* bt) {if(bt NULL) return;BTreeDestroy(bt-left);BTreeDestroy(bt-right);free(bt); }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/88187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做网站要学的技术龙岩互联网

julia在mac环境变量To find the type of a variable/value, we use the typeof() function – it accepts a parameter whose type to be found and returns its data type. 为了找到变量/值的类型,我们使用typeof()函数-它接受要查找其类型的参数并返回其数据类型。…

越秀网站建设推广备份wordpress配置

排版:Alan Wang 我们很高兴地宣布 2024 年 2 月版 Visual Studio Code 的 Python 和 Jupyter 扩展已经推出! 此版本包括以下公告: 默认安装的 Python 调试器扩展快速选择 Python 解释器中的“Create Environment”选项Jupyter 的内置变量查…

三站合一的网站怎么做教程企业网站建设个人博客

在实际开发过程中,为了避免因为在开发中出现的问题以及方便发布版本,如果是多版本发布的情况相下,我们通常需要采用分支进行开发,这个时候,我们就需要了解git分支的相关知识点了,本篇博客也是博主在实际公司…

云上的网站怎么做等保网站如何做排名

乌鸦;从前有一位王后,她有一个还在怀里抱着的小女儿。小姑娘总是调皮不老实,妈妈只能顺着她的性子劝她,可是小姑娘就是不听话。后来,妈妈不耐烦了,正好看见一群乌鸦在皇宫四周飞翔,她就打开窗户…

如何用源码搭建网站源码宜春集团网站建设

随着全球能源需求的持续增长和对环保要求的不断提高,新能源技术的发展已成为全球的热门话题。光伏储能作为其中的一项重要技术,正在逐渐受到人们的关注。那么,光伏储能是什么意思?它又有哪些好处呢? 一、光伏储能的定义…

淄博百度网站成都php网站建设工程师

目录 1.什么是权限? 2.权限的本质 3.Linux中的用户 普通用户与root用户相互转换 普通用户不变root,以root身份执行一个命令 LInux中的角色 4.Linux文件的权限 5.快速掌握修改权限的做法 修改权限 6.对比权限有无表现 对于普通用户&#xf…

用服务器建立网站吗网站规划与网站建设

太阳能是一种清洁能源,合理有效开发太阳能资源对减少污染、保护环境以及应对气候变化和能源安全具有非常重要的实际意义,为了实现能源和环境的可持续发展,近年来世界各国都高度重视太阳能资源的开发利用;另外太阳辐射的光谱成分、…

网站建设太仓互联网ui设计发展前景

具有跨平台能力的KestrelServer是最重要的服务器类型。针对KestrelServer的设置均体现在KestrelServerOptions配置选项上,注册的终结点是它承载的最重要的配置选项。这里所谓的终结点(Endpoint)与“路由”介绍的终结点不是一回事,…

青岛网站建设平台旅游类网站做百度竞价

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍HTML中CSS的基础选择及高级选择器(详解)以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获&#xf…

个人网站毕业设计论文wordpress plugins php speedy

结束了常用容器的介绍,今天继续模版内容的讲解: 文章目录 1.非类型模版参数2.模板的特化2.1模版特化引入和概念2.2函数模版特化2.3类模板特化2.3.1全特化2.3.1偏特化 3. 模板分离编译3.1分离编译概念3.2**模板的分离编译**分析原因 1.非类型模版参数 模板…

seo网站分析工具建网站 服务器需要安装 tomcat

A.Graphics类 Graphics类是java.awt包中的一个类,它用于在图形用户界面(GUI)或其他图形应用程序中进行绘制。该类通常与Component的paint方法一起使用,以在组件上进行绘制操作。 一些Graphics类的常见用法和方法: 在组…

网站建设推广代理带动画引导的网站

目录 1. 作者介绍2. 目标跟踪算法介绍2.1 目标跟踪背景2.2 目标跟踪任务分类2.3 目标跟踪遇到的问题2.4 目标跟踪方法 3. 卡尔曼滤波的目标跟踪算法介绍3.1 所用数据视频说明3.2 卡尔曼滤波3.3 单目标跟踪算法3.3.1 IOU匹配算法3.3.2 卡尔曼滤波的使用方法 3.4 多目标跟踪算法 …

服务范围 网站建设公司做企业网站怎么接活

获取MD5、SHA1、SHA256指纹信息 通过命令的形式获取 winr调出黑窗口cd到证书所在目录输入keytool -list -v -keystore test.keystore,其中 test.keystore为你的证书名称加文件后缀按照提示输入你的证书密码,就可以查看证书的信息 通过uniapp云端查看(证书是在DClou…

建筑行业网站模版百度指数分析报告

1.如何对R语言中两种颜色之间进行细分 2.代码&#xff1a; x <- colorRampPalette(c("#FC8D62","#FDEAE6"))(12) #打印向量值 # 按字典顺序排序颜色值 x_sorted <- sort(x,decreasing TRUE)# 打印排序后的颜色值 print(x_sorted)#展示颜色 scales:…

购门网站建设内丘网站建设

文章目录 前言叶节点 Leafs1、行为 Action2、判断 Condition控制组件 Composites1、顺序执行器 Sequencer2、选择执行器 Selector3、概率选择执行器 Probability Selector4、权重选择执行器 Priority Selector5、平行执行器 Parallel6、轮流选择器 Flip Selector7、完整执行器 …

网站定制设计制作公司网站建设论文的中期报告

如何去区分一个功能测试工程师的水平高和低&#xff1f; 可以从很多个方面去检查&#xff0c;比如测试的思路&#xff0c; 比如测试用例的覆盖度&#xff1f;&#xff0c;比如测试出bug是否能够定位到根因&#xff1f; 上面说的各个方面都很合理&#xff0c;那我们平常如何如更…

dw做网站教程视频各大搜索引擎提交入口地址

注&#xff1a;此为笔者学习狂神说SpringBoot的笔记&#xff0c;其中包含个人的笔记和理解&#xff0c;仅做学习笔记之用&#xff0c;更多详细资讯请出门左拐B站&#xff1a;狂神说!!! 一、整合JDBC使用&#xff08;理解&#xff09; 创建项目 勾选依赖启动器 查看依赖 …

网站 续费wap网站在线生成app

这节课主要讲缓存的基本思想、缓存的优点、缓存的代价三个部分。 缓存的定义 先来看下缓存的定义。 & 缓存最初的含义&#xff0c;是指用于加速 CPU 数据交换的 RAM&#xff0c;即随机存取存储器&#xff0c;通常这种存储器使用更昂贵但快速的静态 RAM&#xff08;SRAM&…

怎样做视频直播网站wordpress关闭会员

作者&#xff1a;苏雷江摘要&#xff1a;在科技英语翻译中&#xff0c;如何正确的理解与表达英语词语对整个翻译过程起着至关重要的作用。本篇文章从词义的选择和词义的引申两个方面来具体阐述如何做到正确的理解与表达科技英语翻译中的英语词语。关键词&#xff1a;科技英语翻…

宁夏做网站的网页游戏软件制作专业

当涉及到网络通信时&#xff0c;OSI参考模型定义了七个层级来描述网络协议和通讯过程。以下是对每个层级的详细介绍&#xff1a; 物理层&#xff08;Physical Layer&#xff09;&#xff1a; 物理层负责将比特流传输到物理媒介上。确定电压、光信号等传输细节&#xff0c;并定义…