树与二叉树(一)

简介:

定义

树是n(n≥0)个结点的有限集,它或为空树(n=0),或为非空树

非空树T满足以下条件:

(1) 有且仅有一个称为根的结点;

(2)除根结点以外的其余结点可分为m(m>0)个互补相交的有限集T1,T2,…Tm,其中每一个集合本身又是一棵树,并且称为根的子树。

空树

                         空树

一般的树

                       一般的树

基本术语

根———即根结点(没有前驱)

叶子———即终端结点(没有后继)

森林———指m棵不相交的树的集合

有序树———结点各子树从左至右有序,不能互换

无序树———结点各子树可互换位置。

双亲———即上层的那个结点(直接前驱)

孩子———即下层结点的子树的根(直接后继)

兄弟———同一双亲下的同层结点(孩子之间互称为兄弟)

堂兄弟———即双亲位于同一层的结点(但并非同一双亲)

祖先———即从根到该结点所经分支的所有结点

子孙———即该结点下层子树种的任一结点

结点———即树的数据元素

结点的度———结点挂接的子树数

结点的层次———从根到该结点的层数(根结点算第一层)

终端结点———即度为0的结点,即叶子

分支结点———即度不为0的结点(也称为内部结点)

树的度———所有结点度中的最大值

树的深度———指所有结点中最大的层数(或高度)


二叉树

二叉树是一种特殊的树结构,普通树若不转化成二叉树,则运算很难实现

为什么要重点研究二叉树呢?

  • 二叉树的结构最简单,规律性最强

  • 所有的树都能转为唯一对应的二叉树,不失一般性。

定义:

每个节点至多有两个子树。

基本特点:

  • 结点的度小于等于2
  • 有序树(子树有序,不能颠倒)
    这里写图片描述

                         二叉树的五种形态
    

二叉树的性质

性质1 : 一棵非空二叉树的第i层上最多有2^i-1个结点(i≥1)。

性质2 :若规定空树的深度为0,则深度为k的二叉树最多有(2^k)-1个结点

(k≥0)。

性质3: 具有n个结点的完全二叉树的深度k为log2n+1。

性质4 :对于一棵非空二叉树,如果度为0的结点数目为n0,度为2的结点数目为n2,则有n0= n2+1。

性质5 :对于具有n个结点的完全二叉树,如果按照从上到下和从左到右的顺序对所有结点从1开始编号,则对于序号为i的结点,有:

  1. 如果i>1,则序号为i的结点的双亲结点的序号为i/2(“/”表示整除);如果i=1,则该结点是根结点,无双亲结点。

  2. 如果2i≤n,则该结点的左孩子结点的序号为2i;若2i>n,则该结点无左孩子。

  3. 如果2i+1≤n,则该结点的右孩子结点的序号为2i+1;若2i+1>n,则该结点无右孩子。

满二叉树:一棵深度为k且有2k-1个结点的二叉树。(意思是树上挂满了结点)

满二叉树

完全二叉树:深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应(意思是只有最后一层叶子不满,且全部集中在左边)

完全二叉树

                    Unfinished, see the next
目录
相关文章
|
网络协议 安全 容灾
【华为HCIP | 高级网络工程师】刷题日记(2)
【华为HCIP | 高级网络工程师】刷题日记(2)
1625 0
数据结构之栈的讲解(源代码+图解+习题)
我们在学习过顺序表和链表之后,了解了使用数组存储数据,使用结构体来存储数据和有关的指针,这些都是底层的东西,链表是靠指针的链接,顺序表是靠数组的下标才能得以实现增删查改。众多数据结构其实底层都离不开数组,指针和结构体,今天我们要学习的栈也不例外,话不多说,直接上正菜!
数据结构之栈的讲解(源代码+图解+习题)
|
5月前
|
缓存 移动开发 网络协议
Netty基础—5.Netty的使用简介
本文详细介绍了Netty服务端和客户端的启动流程、IO事件处理类及TCP粘包拆包问题。服务端启动通过ServerBootstrap配置线程模型、IO模型等,客户端通过Bootstrap完成连接配置。IO事件处理类关注关键方法如channelRead、channelActive等。针对TCP粘包拆包,分析了其原因与解决策略,包括消息定长、加分割符和带上长度字段等方式,并介绍了多种解码器如LineBasedFrameDecoder、DelimiterBasedFrameDecoder等。最后对比了Netty组件与传统BIO模型的对应关系,以及Java序列化的不足。
|
IDE 编译器 开发工具
Dev C++下载地址和安装教程(图解版)
Dev C++ 是一款免费开源的 C/C++ IDE,内嵌 GCC 编译器(GCC 编译器的 Windows 移植版),是 NOI、NOIP 等比赛的指定工具。Dev C++ 的优点是体积小(只有几十兆)、安装卸载方便、学习成本低,缺点是调试功能弱。
54186 0
Dev C++下载地址和安装教程(图解版)
|
8月前
|
存储 安全 区块链
去中心化存储:数据存储的新范式
去中心化存储:数据存储的新范式
462 91
|
9月前
|
存储 人工智能 Cloud Native
NAS深度解析:面向云原生应用的文件存储
本文深入解析了面向云原生应用的文件存储NAS,由阿里云专家分享。内容涵盖Cloud Native与AI浪潮下的技术创新,包括高性能、弹性伸缩、成本优化及数据安全等方面。针对云原生应用的特点,NAS在Serverless生态中不断演进,提供多种产品规格以满足不同需求,如极速型NAS、归档存储等,确保用户在高并发场景下获得稳定低延时的存储体验。同时,通过优化挂载参数和容器访问策略,提升整体性能与可用性。
415 11
|
10月前
|
人工智能 小程序 开发者
【一步步开发AI运动小程序】十一、人体关键点跳跃追踪
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,涵盖云上运动会、健身打卡等热门应用场景。通过示例代码展示如何调用插件功能,实现动作追踪与分析,助力开发者快速上手。
|
11月前
|
人工智能 机器人
“AI+儿童陪伴”,是噱头还是趋势?
AI陪伴型玩具逐渐成为家庭教育的新选择。它们不仅能够解放忙碌的家长,减轻其负担,还能满足孩子的好奇心,提供寓教于乐的成长环境。然而,AI技术尚未完全成熟,内容的准确性和产品的安全性仍需关注,家长在享受便利的同时,仍需谨慎陪伴。
|
存储
【洛谷 P2141】[NOIP2014 普及组] 珠心算测验 题解(集合+多重循环)
**NOIP2014普及组的珠心算测验题要求参赛者找出给定集合中多少个数可表示为其他两个不同数的和。输入含n个正整数,输出满足条件的数的个数。样例输入4个数,输出2,因1+2=3且1+3=4。代码利用集合存储和,遍历所有数对组合,当找到匹配和时插入集合,最后输出集合大小。注意数据规模为n≤100,数不超过10,000。**
371 0
|
JavaScript
基于Vue3+TS简单设计一个查看文章时点击展开和点击收起的小功能
该文章展示了如何使用Vue 3和TypeScript创建一个简单的展开和收起功能,用于文章查看时的交互体验。
412 0
基于Vue3+TS简单设计一个查看文章时点击展开和点击收起的小功能