二叉树介绍与代码实现

文章目录

      • 1 树的基本概念
          • 1.1 树的形式定义
          • 1.2 树的递归定义
          • 1.3 树的基本术语
          • 1.4 二叉树的递归定义
          • 1.5 存储方法
          • 1.6 满二叉树VS完全二叉树
      • 2 二叉树的性质
      • 3 代码实现

1 树的基本概念

1.1 树的形式定义
T={D,R}
  • D为树T中包含n个结点的有限集合,R为树中结点之间关系的集合。
  • 当n=0时,树为空树;当n>0时,R是D上某个二元关系的集合,满足以下条件:
  • 有且仅有一个结点,称为根结点,该结点没有直接前驱结点;
  • 除根结点外,每个结点有且仅有一个前驱结点;
  • D中每个结点可以有零个或多个后继结点;
1.2 树的递归定义
  • 树是由n(n≥0)个结点组成的有限集T。
  • 当n=0时,它是一个空树;当n>0时,它满足两个条件:
  • 有且仅有一个特定的结点,称为根结点。
  • 除根结点以外的其余结点分为m个(m≥0)互不相交的有限集T1、T2、……Tm,其中每个集合又都是一棵树,称T1、T2、……Tm为根结点的子树。
1.3 树的基本术语
  1. 结点:树的数据元素
  2. 结点的度:该结点的分支的个数
  3. 树的度:树中所有结点的度的最大值
  4. 结点的层次:从根到该结点的层数(根结点算第一层)
  5. 树的深度:所有结点的层次的最大值
  6. 根结点:在非空树中,无前驱结点的结点
  7. 分支结点:度不为0的结点
  8. 叶结点:度为0的结点
  9. 孩子结点:结点的子树的根
  10. 双亲结点:孩子结点的根结点
  11. 兄弟结点:具有共同双亲的结点
  12. 堂兄弟结点:双亲互为兄弟的结点
  13. 祖先结点:从根到该结点的所经历的所有结点
  14. 子孙结点:以某结点为根的子树中的任一结点
1.4 二叉树的递归定义

二叉树是结点的有限集合,这个有限集,或为空集,或由一个根结点及两棵互不相交的,分别叫作这个根的左子树和右子树的二叉树组成。

【注意】二叉树不是树的特殊情况。

1.5 存储方法

双亲表示法——求父结点方便
孩子表示法——求子结点方便
双亲孩子表示法—求父结点和子结点方便
二叉树表示法——把一个普通树转化成二叉树来存储

1.6 满二叉树VS完全二叉树

满二叉树

  • 定义:深为k且有2k−12^k-12k1个结点的二叉树。
  • 编号:约定编号从根开始,自上而下,自左而右,给二叉树中的每个结点一个从1开始的连续的编号。

完全二叉树

  • 定义:深为k且有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应。

在这里插入图片描述

满二叉树是完全二叉树,反之则不一定!

2 二叉树的性质

  1. 在二叉树的第 i 层上至多有 2i−12^{i-1}2i1个结点 (i≥1i\geq1i1)
    在这里插入图片描述

证明:
(1)i=1时,只有一个根结点,2i−12^{i-1}2i1 =202^020= 1,结论正确;
(2)假设n=k-1命题成立,即第k-1层上至多有 2k−22^{k-2}2k2 个结点,则当n=k时,每个结点至多有两棵子树;
k层结点最多为k-1层的2倍,故s<=2∗2k−2=2k−1s<=2*2^{k-2}=2^{k-1}s<=22k2=2k1,第i层至多有 2i−12^{i-1}2i1 个结点;
(3)由归纳法,即得证。


  1. 深度为 k 的二叉树至多有2k−12^k-12k1个节点(k≥1k\geq1k1)

20+21+…+2k-1=2k-1(利用等比数列求和公式得到结果)


  1. 对任何一颗二叉树 T,如果其终端结点树为 n0n_0n0,度为 2 的结点数为 n2n_2n2,则 n0n_0n0 = n2n_2n2+1

证明:
终端结点数就是叶结点数了,而一颗二叉树,除了叶结点外,剩下的就是度为 12 的结点数了,我们设 n1n_1n1 为度是 1 的结点数,则树 T 的总结点数为

n = n0n_0n0 + n1n_1n1 + n2n_2n2

再换一个角度,数一下二叉树中连接线的总数,由于根节点没有双亲,所以一个二叉树中,连接线数等于结点树-1,n1n_1n1 的度为 1 所以它仅有一条连接线,n2n_2n2同理,代数表达式就是

n−1n-1n1 = n1n_1n1 +2n22n_22n2

再结合等式

n = n0n_0n0 + n1n_1n1 + n2n_2n2

推导出

n0n_0n0 + n1n_1n1 + n2n_2n2-1 = n1n_1n1 + 2n22n_22n2

所以:

n0n_0n0 = n2n_2n2 + 1


  1. 具有 n 个结点的完全二叉树的深度为 [log⁡2n][\log_2 n][log2n] + 1 ,([x]代表不大于 x 的最大整数)

证明:
1)对于满二叉树,深度为 k 的满二叉树至多有2k−12^k-12k1个节点(k≥1k\geq1k1)
那么由:

n=2k−1n=2^k-1n=2k1

可以倒推

k=log⁡2(n+1)k=\log_2(n+1)k=log2(n+1)

2)对于完全二叉树,它的结点数一定少于等于同样深度的满二叉树 2k−12^k-12k1,但一定多于 2i−1−12^{i-1}-12i11,即:

2i−1−1<n≤2k−12^{i-1}-1<n\leq2^k-12i11<n2k1

所以

2i−1≤n<2k2^{i-1}\leq n < 2^k2i1n<2k

两边取对数:

2i−1≤n<2k2^{i-1}\leq n < 2^k2i1n<2k

k 又是整数:

k=[log⁡2n]+1k = [\log_2 n] + 1k=[log2n]+1


  1. 对于一个有 n 个结点的完全二叉树(或满二叉树)的结点按层序顺序从左到右编号,对任意结点 i 有:

1)如果 i = 1,那么结点 i 为该树的根,无双亲;若 i > 1 ,则其双亲是结点 [i/2]
2)如果 2i > n,则结点无左孩子(结点 i 为叶子结点),否则其左孩子结点是 2i
3)如果 2i + 1 > n,则结点 i 无右孩子,否则其右孩子是结点 2i + 1

3 代码实现

创建二叉树:

#include <stdio.h>
#include <stdlib.h>typedef char ElementType;
typedef struct Binary {ElementType data;struct Binary *lchild;struct Binary *rchild;
} *BinaryTree;/* Recursive implementation 1 */
BinaryTree CreateBinaryTree_1(void)
{BinaryTree bt;char ch;scanf("%c", &ch);if (ch == '#') {bt = NULL;} else {bt = (BinaryTree)malloc(sizeof(struct Binary));bt->data = ch;bt->lchild = CreateBinaryTree_1();bt->rchild = CreateBinaryTree_1();}return bt;
}/* Recursive implementation 2 */
void CreateBinaryTree_2(BinaryTree *bt)
{char ch;scanf("%c", &ch);if (ch == '#') {*bt = NULL;} else {*bt = (BinaryTree)malloc(sizeof(struct Binary));(*bt)->data = ch;CreateBinaryTree_2(&((*bt)->lchild));CreateBinaryTree_2(&((*bt)->rchild));}
}void PreviousOrderTraverse(BinaryTree T)
{if (T == NULL) {return;}printf("%c", T->data);PreviousOrderTraverse(T->lchild);PreviousOrderTraverse(T->rchild);
}int main(void)
{BinaryTree bt;// bt = CreateBinaryTree_1();CreateBinaryTree_2(&bt);PreviousOrderTraverse(bt);return 0;
}

运行结果:
在这里插入图片描述

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

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

相关文章

2022先进计算七大趋势

来源&#xff1a;CBInsights 中文编辑&#xff1a;蒲蒲作为智能社会的底座、数字经济的引擎&#xff0c;算力的重要性已经被提到一个前所未有的高度。当下&#xff0c;算力的提升仍然面临着来自多个维度的挑战。不论是硬件层面还是架构层面&#xff0c;算力发展都亟需变革。先进…

类脑计算将何去何从?

来源&#xff1a;内容由半导体行业观察&#xff08;ID&#xff1a;icbank&#xff09;编译&#xff1a;nature.摘要类脑计算新技术有望通过完全不同的方式处理信息&#xff0c;能效极高&#xff0c;并能处理我们加速产生的大量非结构化和嘈杂的数据。为了实现这一承诺&#xff…

1 计算机网络体系结构与OSI参考模型

文章目录1 计算机网络概述1.1 计算机网络概念1.2 计算机网络的分类2 OSI 七层参考模型应用层表示层会话层传输层网络层数据链路层物理层3 OSI参考模型与网络排错4 OSI参考模型与网络安全5 TCP/IP协议和OSI参考模型1 计算机网络概述 1.1 计算机网络概念 计算机网络概念&#xf…

一个故事讲完 CPU 的工作原理

来自&#xff1a;知乎 作者&#xff1a;柳两丛 www.zhihu.com/question/40571490/answer/718942643上二年级的小明正坐在教室里。现在是数学课&#xff0c;下午第一节&#xff0c;窗外的蝉鸣、缓缓旋转的吊扇让同学们昏昏欲睡。此时&#xff0c;刘老师在黑板上写下一个问题&a…

2 计算机网络性能指标

文章目录速率带宽吞吐量时延时延带宽积往返时间网络利用率速率 连接在计算机网络上的主机在数字信道上传送数据位数的速率&#xff0c;也称为data rate或bit rate。 单位是b/s, kb/s, Mb/s, Gb/s. 比特&#xff08;bit&#xff09;是计算机中数据量的单位&#xff0c;也是信息论…

Anthropic 公司研究人员从简单的 AI 中获得关于 Transformer 的新理解

来源&#xff1a;ScienceAI编辑 &#xff1a;橘子皮在过去的两年里&#xff0c;人工智能程序的语言流畅度达到了惊人的水平。其中最大和最好的都是基于 2017 年发明的称为 Transformer 的架构。它以方程式列表的形式作为程序遵循的一种蓝图。但除了这个简单的数学大纲之外&…

3 物理层 数据通信基础知识 奈氏准则与香农定理 物理层传输介质 信道复用技术

文章目录1 物理层基本概念2 数据通信的基础知识2.1 典型的数据通信系统模型2.2 与通信相关的几个术语2.3 有关信道的几个概念2.4 基带(baseband)信号和带通(band pass)信号2.5 几种最基本的调制方法2.6 网卡传送信号时的编码格式2.7 信道的极限容量2.8 信道能够通过的频率范围2…

向真实世界应用进军:持续自监督学习的挑战

来源&#xff1a;图灵人工智能编译&#xff1a;OGAI编辑&#xff1a;陈彩娴在 Yann Lecun 等人的推动下&#xff0c;自监督学习成为了深度学习领域最受瞩目的技术之一。互联网世界源源不断产生的数据流无疑是充分发挥自监督学习能力的最佳土壤。然而&#xff0c;将自监督学习应…

人类“超级大脑”背后的规模法则

来源&#xff1a;集智俱乐部作者&#xff1a;郭瑞东 编辑&#xff1a;邓一雪摘要不同动物的大脑具有不同形状和大小。大自然赋予像人类这样脑容量大的灵长类动物比例较大的大脑皮层。然而&#xff0c;比较研究表明&#xff0c;分配给大脑白质连接&#xff08;大脑区域间长距离沟…

Meta AI 宣布对人脑和语言处理进行长期研究

来源&#xff1a;ScienceAI编辑&#xff1a;绿萝人类的大脑长期以来一直是一个难题——它是如何发展的&#xff0c;它如何继续进化&#xff0c;它被开发和未开发的能力。人工智能 (AI) 和机器学习 (ML) 模型也是如此。正如人类大脑创建的 AI 和 ML 模型日益复杂一样&#xff0c…

10年100亿!“新基石研究员”项目正式发布

来源&#xff1a; 中国科学报文&#xff1a;《中国科学报》记者 赵广立4月30日&#xff0c;《中国科学报》获悉&#xff0c;一项总投入达100亿元、面向基础研究领域的社会资助项目——“新基石研究员项目”正式发布。在国家有关部门的指导下&#xff0c;“新基石研究员项目”由…

代表地球文明精髓的E=mc²,为什么被称为“死亡方程式”

来源&#xff1a;大数据文摘有这样一条方程式&#xff0c;原腾讯副总裁吴军博士说&#xff0c;如果地球毁灭&#xff0c;要在一张名片上写下地球文明的全部精髓&#xff0c;他会写下三个公式&#xff0c;其中就包含这个方程式&#xff1b;搜狐CEO张朝阳专门开了堂线下物理课&am…

北交桑基韬:“超”人的机器学习,非语义特征的得与失

来源&#xff1a;AI科技评论作者&#xff1a;桑基韬整理&#xff1a;维克多人工智能目前最大的“拦路虎”是不可信赖性&#xff0c;以深度学习为基础的算法&#xff0c;在实验室环境下可以达到甚至超过人类的水平&#xff0c;但在很多实际应用场景下的性能无法保证&#xff0c;…

手把手教你搭建一个中式菜谱知识图谱可视化系统

手把手教你搭建一个中式菜谱知识图谱可视化系统中式菜谱知识图谱1、系统功能2、先来看看效果实体间关联关系及实体信息显示不同类型实体开关显示搜索功能展示3、系统实现流程3.1 数据爬取3.2 D3可视化中式菜谱知识图谱 今天分享一个自己从数据爬取到d3可视化的中式菜谱知识图谱…

AI数字人未来十大展望

来源 &#xff1a;商汤智能产业研究院编辑 &#xff1a;刘振航从电影中逼真的CG人物&#xff0c;到能够与我们面对面进行互动的智能服务助手&#xff0c;数字人会经历几级进化&#xff1f;数字人正在从有颜无智的“CG数字模特”&#xff0c;进化为可提高生产力、驱动创新服务的…

知识图谱最新权威综述论文解读:开篇部分

论文地址&#xff1a;http://arxiv.org/abs/2002.00388 这篇综述是数据科学权威 Philip S. Yu 团队对知识图谱领域的最新综述论文&#xff0c;论文从知识图谱的发展历史、知识表示学习、知识获取、知识应用、未来研究方向等方面描述了知识图谱的全局。 首先&#xff0c;咱们先…

耗资52亿美元,历时15年,人类有史以来建造的最复杂机器

来源&#xff1a;世界先进制造技术论坛欧洲大型强子对撞机是现在世界上最大、能量最高的粒子加速器&#xff0c;是一种将质子加速对撞的高能物理设备&#xff0c;英文名称为LHC。LHC是人类迄今建造的最大最复杂的科学设备&#xff0c;它的建设历时15年&#xff0c;耗资52亿美元…

贝叶斯深度学习:一个统一深度学习和概率图模型的框架

来源&#xff1a;AI科技评论 作者&#xff1a;王灏整理&#xff1a;维克多人工智能&#xff08;AI&#xff09;的进展显示&#xff0c;通过构建多层的深度网络&#xff0c;利用大量数据进行学习&#xff0c;可以获得性能的显著提升。但这些进展基本上是发生在感知任务中&#…

知识图谱最新权威综述论文解读:知识表示学习部分

知识图谱最新权威综述论文解读&#xff1a;知识表示学习部分知识图谱表示学习1 表示空间1.1 Point-wise空间1.2 复数向量空间​1.3 高斯分布1.4 流形和群2 打分函数2.1 基于距离的打分函数​2.2 语义匹配模型&#xff1a;​3 编码模型3.1 线性/双线性模型3.2 张量分解模型3.3 神…

对知识图谱的告白:斯坦福大学CS520课程介绍

斯坦福大学CS520知识图谱系列课程&#xff0c;从这个课程的编号就足以看出对计算机科学的告白。 相信大家对斯坦福大学的计算机学科公开课一点也不陌生&#xff0c;对很多人来说&#xff0c;面向计算机视觉的CS231n和面向自然语言处理的CS224n几乎成为了入门人工智能领域以及C…