返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言中关于树和二叉树的相关概念
  • 724
分享到

C语言中关于树和二叉树的相关概念

C语言树和二叉树的概念C语言树和二叉树 2023-02-14 12:02:22 724人浏览 独家记忆
摘要

目录一、树树的相关概念树的存储结构二、二叉树二叉树的性质树是一种 非线性的 数据结构,由 n(n >= 0) 个 有限节点 组成一种 具有层次关系 的集合 一、树 树的结构可以

树是一种 非线性的 数据结构,由 n(n >= 0) 个 有限节点 组成一种 具有层次关系 的集合

一、树

树的结构可以递归定义为:

根节点除根节点之外,其余节点被分成 M(M >= 0) 个互不相交的集合,每个集合分别是一棵子数

0 个结点的树就称为空树

  • 树中除 根节点没有前驱节点 之外,其余每个节点都 有且仅有一个前驱节点,因此 n 个节点的树有 n - 1 条边
  • 树中 每个节点 都可以 有 0 个或多个后继节点

树的相关概念

  • 节点的度:节点含有的 子树个数,如图中 A 节点的度为 3
  • 叶节点或终端节点:节点的 度为 0,如图中 E、F、G、H、I
  • 分支节点或非终端节点:节点的 度不为 0,如图中 A、B、C、D
  • 父节点或双亲节点:若一个节点含有子节点,则这个节点称为其子节点的父节点,如图中 B 是 E 和 F 的父节点
  • 子节点或孩子节点:若一个节点含有子树,子树的根节点 称为该节点的子节点,如图中 E 和 F 都是 B 的子节点
  • 兄弟节点:父节点相同 的节点互为兄弟节点,如图中 E 和 F 互为兄弟节点
  • 树的度:树中所有节点的度中的最大值,如图中 A 节点的度为 3,是树中所有节点的度中的最大值,即树的度为 3
  • 节点的层次:如上图,从根节点开始定义为第一层,根节点的子节点为第二层 …,(将根节点层次定义为 0 也是可以的)
  • 树的高度或深度:树中节点的最大层次,图中为树的高度为 3
  • 堂兄弟节点:父节点在同一层次的结点,如图中 E、F、G、H、I 结点互为堂兄弟节点
  • 节点的祖先:根节点到该节点路径上的所有节点, A、B 结点是 E 的祖先
  • 子孙:以某节点为根的子树中任一节点 都称为该节点的子孙,如上图:所有节点都是 A 的子孙

森林:由 M(M > 0) 棵 互不相交的树 构成的集合,将上图中 A 节点去掉后,便构成由以 B、C、D 为根节点的三颗树构成的森林

树的存储结构

在树的结构中可以发现,树是不易于用数组来存储的,因此 采用链式的方式来存储树

结构1:

由于树的结构中 每个节点的孩子个数是不确定的,因此每个节点需要使用一个顺序表存储孩子的指针

typedef int TreeDataType;
typedef struct Treenode
{
	TreeDataType data;
	SeqList childs;	//顺序表,并且每个元素的类型是 struct TreeNode*
}TreeNode;

结构2:

孩子兄弟表示法:节点的第一个孩子用该节点中的孩子指针指向,第二个孩子用该结点的第一个孩子结点的兄弟指针指向,第三个孩子用该节点的第二个孩子结点的兄弟指针指向…

typedef int TreeDataType;
typedef struct TreeNode
{
	TreeDataType data;
	struct TreeNode* child;
	struct TreeNode* brother;
}TreeNode;

存储树的方法还有双亲表示法,孩子表示法、孩子双亲表示法等,感兴趣的读者可以自行查阅

二、二叉树

树中 所有结点的度都小于等于 2 的树,即树的度小于等于 2 的树,称为二叉树

在二叉数中子树有左右区分,次序不能颠倒,左边的称为左子树,右边的称为右子树

二叉树的递归定义为:

  • 根节点
  • 左子树和右子树

左子树和右子树可以为空树,这里的子树也是一颗二叉树

二叉树的性质

假定根节点的层数为 1

  • 一棵非空二叉树的第 i 层上最多有 2^(i - 1)个节点
  • 深度为 h 的二叉树的最大节点数是 2^h - 1
  • 任何一棵二叉树,如果度为 0 的叶节点个数为 n0,度为 2 的分支节点个数为 n2,则有 n0 = n2 +1,即度为 0 的节点,比度为 2 的节点多 1

假设一颗二叉树有 n 个节点,度为 0 的节点数为 n0,度为 1 的节点数为 n1,度为 2 的节点数为 n2,根据 n 个节点的二叉树有 n - 1 条边,可得到如下关系:

  • n0 * 0 + n1 * 1 + n2 * 2 = n - 1
  • n0 + n1 + n2 = n

解得:n0 = n2 + 1

满二叉树:如果二叉树中每一个层的节点数都达到最大值,则这棵二叉树称为满二叉树

假设一棵二叉树的层数为 K,且节点总数是 2^K - 1,则它就是满二叉树

完全二叉树:假设一颗二叉树有 K 层,如果这颗二叉数的前 K - 1 层是满二叉树,并且第 K 层是从左往右还是连续的节点,则这棵二叉树称为完全二叉树

假设一棵完全二叉树的层数为 K ,则完全二叉树节点数的范围:2^(K - 1) ~ 2^K - 1

完全二叉树中度为 1 的节点有 0 个或 1 个

满二叉树可以认为是一种特殊的完全二叉树

  • 具有 n 个节点的 满二叉树 的深度 h = log2(n + 1),n 个节点的 完全二叉树 的深度 h = log2(n + 1),h 向上取整(2.1 取 3)

  • 对于具有 n 个节点的 完全二叉树,按照 从上至下、从左至右 的顺序,对所有节点从 0 开始依次编号

由于完全二叉树中从第二层开始,每一层的结点都是偶数个,因此 左孩子的编号都均为奇数,右孩子的编号都均为偶数

在 n 个节点的 完全二叉树 中,对于合法的编号为 i 的节点有:

  • i 节点的 左孩子 的编号为 2 * i + 1,如果 2 * i + 1 < n,表示没有左孩子
  • i 节点的 右孩子 的编号为 2 * i + 2,如果 2 * i + 2 < n,表示没有右孩子
  • 根据 1 和 2 可知 i 节点的 父节点 的编号为 (i - 1) / 2,如果 i = 0,表示为根节点,没有父节点

到此这篇关于C语言中关于树和二叉树的相关概念的文章就介绍到这了,更多相关C语言树和二叉树内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言中关于树和二叉树的相关概念

本文链接: https://lsjlt.com/news/196011.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言中关于树和二叉树的相关概念
    目录一、树树的相关概念树的存储结构二、二叉树二叉树的性质树是一种 非线性的 数据结构,由 n(n >= 0) 个 有限节点 组成一种 具有层次关系 的集合 一、树 树的结构可以...
    99+
    2023-02-14
    C语言树和二叉树的概念 C语言树和二叉树
  • Java中关于二叉树的概念以及搜索二叉树详解
    目录一、二叉树的概念为什么要使用二叉树?树是什么?树的相关术语!根节点路径父节点子节点叶节点子树访问层(深度)关键字满二叉树完全二叉树二叉树的五大性质二、搜索二叉树插入删除hello...
    99+
    2024-04-02
  • C语言二叉树的概念结构详解
    目录1、树的概念及结构(了解)1.1树的概念:1.2树的表示法:2、二叉树的概念及结构2.1二叉树的概念2.2特殊的二叉树2.2二叉树的性质2.3二叉树的顺序存储2.4二叉树的链式存...
    99+
    2022-11-13
    C语言二叉树 C语言二叉树的创建
  • C语言数据结构系列篇二叉树的概念及满二叉树与完全二叉树
    链接:C语言数据结构系列之树的概念结构和常见表示方法 0x00 概念 定义:二叉树既然叫二叉树,顾名思义即度最大为2的树称为二叉树。 它的度可以为 1 也可...
    99+
    2024-04-02
  • C语言二叉树与堆的概念与实现
    目录引言—树的故事树的基本性质和描述树的基本特点树的关键字解析树的表示方法二叉树的概念结构特殊二叉树二叉树的性质二叉树的存储结构二叉树与堆堆的实现堆排序堆的功能实现TOPK问题二叉树...
    99+
    2024-04-02
  • C语言关于二叉树中堆的创建和使用整理
    目录一、堆的创建1、向上调整算法建堆2、向下调整算法建堆二、堆排序1、建堆2、利用堆删除思想来进行排序一、堆的创建 下面我们先看一段代码: void HeapSort(int* a,...
    99+
    2022-11-13
    C语言 创建堆 C语言 堆的应用
  • 关于Java的二叉树、红黑树、B+树详解
    目录1、二叉查找树2、平衡二叉查找树3、红黑树:4、 B树:5、 B+树6、红黑树 VS B+树数组和链表是常用的数据结构,数组虽然查找快(有序数组可以通过二分法查找),但是插入和删...
    99+
    2023-05-20
    Java二叉树 Java红黑树 JavaB+树
  • C语言二叉树的概念是什么及怎么使用
    本篇内容主要讲解“C语言二叉树的概念是什么及怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言二叉树的概念是什么及怎么使用”吧!1.二叉树的概念及结构 ①概念:一棵二叉树是结...
    99+
    2023-06-29
  • 纯C++代码详解二叉树相关操作
    目录前言 二叉树的概念二叉树的相关术语相关操作菜单二叉树的构造创建二叉树先序遍历二叉树  中序遍历二叉树后序遍历二叉树层次遍历二叉树二叉树的深度二叉树的叶子结点数...
    99+
    2024-04-02
  • C语言 超详细总结讲解二叉树的概念与使用
    目录1.二叉树的概念及结构 2.二叉树链式结构的实现1.二叉树的概念及结构  ①概念:一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别...
    99+
    2024-04-02
  • C语言详解实现链式二叉树的遍历与相关接口
    目录前言一、二叉树的链式结构二、二叉树的遍历方式1.1 遍历方式的规则1.2 前序遍历1.3 中序遍历1.4 后序遍历1.5 层序遍历三、二叉树的相关接口实现3.1 二叉树节点个数3...
    99+
    2024-04-02
  • C语言之二叉树的遍历
    目录0.写在前面1.前序遍历步骤详解代码实现2.中序遍历步骤详解代码实现3.后序遍历步骤详解代码实现0.写在前面 认识二叉树结构最简单的方式就是遍历二叉树。所谓遍历二叉树就是按照某种...
    99+
    2023-05-14
    C语言实现二叉树遍历 二叉树遍历
  • Java中二叉树的基础概念是什么
    这篇文章主要讲解了“Java中二叉树的基础概念是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中二叉树的基础概念是什么”吧!1. 树型结构1.1概念树是一种 非线性 的数据结构,...
    99+
    2023-06-29
  • C语言中二叉树的示例分析
    这篇文章主要为大家展示了“C语言中二叉树的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言中二叉树的示例分析”这篇文章吧。树概念及结构树是一种 非线性 的数据结构,它是由 n ( n...
    99+
    2023-06-29
  • 深入探究C语言中的二叉树
    目录1.树概念及结构1.1树的概念 1.2 树的相关概念1.3 树的表示2.二叉树概念及结构   2.1概念2.2 特殊的二叉树2.3 二叉树的性质&n...
    99+
    2023-05-19
    C语言二叉树 C语言数据结构
  • 纯C++二叉树相关操作实例代码分析
    这篇“纯C++二叉树相关操作实例代码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“纯C++二叉树相关操作实例代码分析”文...
    99+
    2023-07-02
  • C语言二叉树的操作方法
    本篇内容主要讲解“C语言二叉树的操作方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言二叉树的操作方法”吧!二叉树分类满二叉树除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二...
    99+
    2023-06-30
  • C语言中二叉查找树怎么实现
    本文小编为大家详细介绍“C语言中二叉查找树怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言中二叉查找树怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。二叉查找树性质1、二叉树每个树的节点最多有...
    99+
    2023-06-16
  • C语言中二叉树的后序遍历详解
    目录一.二叉树的后序遍历.(递归)二.二叉树的后序遍历(迭代)总结首先我们从两个方面讲解二叉树的后序遍历(递归+迭代) 一.二叉树的后序遍历.(递归) 思想: 首先我们从二叉树的根节...
    99+
    2024-04-02
  • c语言二叉树的前序遍历方法
    这篇文章主要讲解了“c语言二叉树的前序遍历方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c语言二叉树的前序遍历方法”吧!题目给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,nu...
    99+
    2023-06-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作