嵌入式初学-C语言-数据结构--六

树与二叉树

基本概念

树是一种非线性结构,其严格的数学定义是:如果一组数据中除了第一个节点(第一个节点称为根节 点,没有直接前驱节点)之外,其余任意节点有且仅有一个直接前驱,有零个或多个直接后继,这样 的一组数据形成一棵树。这种特性简称为一对多的逻辑关系。即用于描述具有层次关系,类似组织架 构关系的一种数据结构。

 树的组成:根,分支,叶子

常见例子

日常生活中,很多数据的组织形式本质上是一棵树。比如一个公司中的职员层级关系,一个学校中的 院系层级关系,淘汰赛中的各次比赛队伍,一个家族中的族谱成员关系等,这些都是树状逻辑结构。 由于树状结构表现出来都是具有层次的,因此也被称为层次结构。

 相关术语

通常,在逻辑上表达一棵抽象的树状结构的时候,习惯于将树根放在顶部,树枝树杈向下生长,如下 图所示。

 对于一棵树来说,有如下基本术语:

1. 结点:

        树中的元素 及其子树

2. 根(root):

        树的第一个节点,没有直接前驱。如上图中的A。

3. 双亲节点/父节点(parent):

        某节点的直接前驱称为该节点的双亲节点,或成为父节点。例如上图中A是B的父节点。

4. 孩子节点/子节点(child):

        某节点的直接后继称为该节点的孩子节点。例如上图中B、C、D均为A的孩子节点。

5. 节点的层次(level):

        根节点所在的层次规定为第1层,其孩子所在的层次为第2层,后代节点以此类推。比如上图中节 点E的层次是3。

6. 节点的度(degree):

        一个节点拥有的孩子节点的总数,称为该节点的度。比如上图中节点B的度为2。

7. 叶子(leaf):

        一棵树中度等于0的节点,被称为叶子,又称为终端节点。比如上图中K、L、F、G、M、I、J均为 叶子。

8. 树的高度(height):

        一棵树中所有节点的层次的最大值,称为这棵树的高度,又称为树的深度。比如上图的树的高度为 4。

9. 有序树与无序树:

一棵树中,如果某个节点的孩子节点之间是有次序的,则称这棵树为有序树,反之称为无序树。

二叉树

在各种不同的树状结构中,最常见也最重要的是二叉树(Binary Tree),下面是二叉树的定义:

        有序树

        任意节点的度小于等于2

比如如下这棵树就是一棵二叉树。其中8是根节点,14是10的右孩子(因为二叉树是有序树,因此严 格区分左右),而13则是14的左孩子。

 为了方便对二叉树进行操作,通常会对一棵它进行标号:从上到下,从左到右进行标号:

 注意: 没有孩子节点的地方也要标出来

对于二叉树而言,有如下特性:

        1. 第𝑖层上,最多有2𝑖−1个节点。

         2. 高度为𝑘的二叉树,最多有2𝑘−1个节点。

        3. 假设叶子数目为𝑛0,度为2的节点数目为𝑛2,则有:n0=n2+1

二叉树的一般结构:

满二叉树

一棵深度为k,且有2^k-1个结点的二叉树,称为满二叉树。这种树的特点是每一层上的结点数都是 最大结点数。

简单理解: 除了叶子节点之外,其余节点的度都为2;其特点是: 如果深度为 K,则节点数为 2^K - 1。 

完全二叉树

在一棵二叉树中,除最后一层外,若其余层都是满的,或者最后一层是满的,或者是最后一层在右 边缺少连续若干结点,则此二叉树为完全二叉树。

简单理解:除最后一层叶子节点外。是一颗满二叉树,最后一层由右向左有连续缺省的0个,1个或 多个节点。

 二叉搜索树(BST)

特点:

        1. 如果节点具有左子树,则左子树上所有节点都不大于该节点的值;

        2. 节点具有右子树,则右子树上所有节点都不小于该节点的值;

        3. 子树又是二叉搜索数

  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值