首页 > 其他分享 >二叉树的概念、表示法、性质和操作

二叉树的概念、表示法、性质和操作

时间:2024-10-08 17:33:01浏览次数:8  
标签:结点 遍历 中序 路径 表示法 概念 二叉树 长度

本文记述了二叉树的基本概念、表示法、性质和操作。

◆ 概念

二叉树(以下也简称树)是一种存放多个元素的数据结构。每个元素称为结点,每个结点有左、右两个链接,每个链接要么指向其他结点,要么是空链接。

某个结点是它的左、右链接指向的结点的父结点,被指向的结点是其父结点的左或右子结点。没有父结点的结点称为根结点,没有子结点的结点称为叶子结点。

由于结点指向结点的递归特性,所以某个结点(X)的左、右子结点及后者递归指向的所有结点构成了以该结点(X)为根结点的左、右子树,且这两棵子树不相交。

从根结点到某个结点的路径称为内部路径。内部路径上的链接的数量为内部路径的长度。将一棵树中所有的内部路径长度加起来,就得到整棵树的内部路径长度。从根结点到某个叶子结点的空链接的路径称为外部路径。外部路径上的链接的数量为外部路径的长度。将一棵树中所有的外部路径长度加起来,就得到整棵树的外部路径长度。

以某个结点为终点的内部路径的长度,也称为此结点的深度或高度(【注】有的文章将该长度加 1 作为结点的深度,请读者注意其中的差异)。所有结点的最大深度为二叉树的深度。

从根结点到叶子结点的路径上,依次给每个结点指定层号,根结点为第 1 层,根结点的子结点为第 2 层,依次类推。最后一层的层号为二叉树的层数。

所有叶子结点的深度都相同,且所有的非叶子结点都有两个子结点,这样的二叉树称为满二叉树。

从第一层到倒数第二层是满二叉树,且最后一层的所有结点都在此层左侧,这样的二叉树称为完全二叉树。

树中的任意结点要么有两个子结点要么没有子结点,这样的二叉树称为完满二叉树。

◆ 表示

二叉树常用倒置的树状形式直观地表示出来,如下图示例,

figure1

figure2

figure3

figure4

figure5

如果用层次法从上到下、从左到右对一棵满二叉树的结点连续编号,则编号为 k 的结点,其父结点的编号为 ⎣k/2⎦,其子结点的位置为 2k 和 2k+1。对于非满二叉树,可以考虑将没有结点的位置标注为空,这种顺序形式表示出来,如下图所示,

figure6

figure7

◆ 性质

  • 性质 1 :二叉树的第 i (≥ 1) 层上至多有 2^(i-1) 个结点。
  • 性质 2 :深度为 h (≥ 0) 的二叉树至多有 2^(h+1) - 1 个结点。
  • 性质 3 :二叉树中,叶子结点的个数比同时有左右子结点的结点的个数多 1 。
  • 性质 4 :有 N 个结点的完全二叉树的深度为 ⎣lg(N)⎦。 (lg 为以 2 为底的对数)
  • 性质 5 :完全二叉树中编号为 k (≥ 1) 的结点,若有父结点,其父结点的编号为 ⎣k/2⎦;若有子节点,其左右子结点的位置为 2k 和 2k+1。
  • 性质 6 :二叉树的外部路径长度比其内部路径长度多 2N 。

◆ 操作

二叉树的基本操作是遍历,即按照某种规则访问树中的每个结点一次。通常有前序遍历、中序遍历、后序遍历和层次遍历。

树的前序遍历操作为:

  1. 访问树的根结点;
  2. 前序遍历根结点的左子树(若有);
  3. 前序遍历根结点的右子树(若有)。

对于前述“一般形态二叉树”的树状形式和顺序形式的前序遍历过程,如下图所示,

figure8

figure9

树的中序遍历操作为:

  1. 中序遍历根结点的左子树(若有);
  2. 访问树的根结点;
  3. 中序遍历根结点的右子树(若有)。

对于上述例子的中序遍历过程,如下图所示,

figure10

figure11

树的后序遍历操作为:

  1. 中序遍历根结点的左子树(若有);
  2. 中序遍历根结点的右子树(若有);
  3. 访问树的根结点。

对于上述例子的后序遍历过程,如下图所示,

figure12

figure13

树的层次遍历操作为:

  1. 访问树的根结点;
  2. 从左到右访问树的第 2 层的所有结点;
  3. 从左到右访问树的第 i 层的所有结点,直到最后一层。

对于上述例子的层次遍历过程,如下图所示,

figure14

figure15

◆ 最后

写作过程中,笔者参考了《算法(第4版)》软件设计师教程(第2版Wolfram Mathworld。致各位作者。

标签:结点,遍历,中序,路径,表示法,概念,二叉树,长度
From: https://www.cnblogs.com/green-cnblogs/p/18451096

相关文章

  • 初始操作系统篇(1)—— 操作系统的概念与分类
    找往期文章包括但不限于本期文章中不懂的知识点:个人主页:我要学编程(ಥ_ಥ)-CSDN博客所属专栏: 操作系统目录操作系统的基本概念 操作系统的概念操作系统的特征并发共享虚拟异步操作系统的目标和功能操作系统的发展与分类手工操作阶段批处理阶段单道批处理系......
  • SpringBoot飘香水果网站:从概念到实现
    3系统分析3.1可行性分析通过对本飘香水果购物网站实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。3.1.1技术可行性本飘香水果购物网站采用JAVA作为开发语言,SpringBoot框架,是基于WEB平......
  • linux 系统用户态与内核态概念
    内核态(KernelMode)和用户态(UserMode)是现代操作系统中两种不同的CPU运行模式,用来保护系统的稳定性和安全性。它们的主要区别在于对硬件资源的访问权限和系统调用的执行上下文。以下是对内核态和用户态的详细解释:1.内核态(KernelMode)定义:内核态是操作系统内核所运行的模式。在......
  • linux 系统CPU 上下文切换(Context Switch)概念
    CPU上下文切换(ContextSwitch)是操作系统调度程序在不同任务之间切换CPU执行的过程。上下文切换的核心是保存当前任务的状态(也叫“上下文”),然后恢复下一个任务的状态,最终交给CPU执行。这种切换可能发生在进程、线程或者内核级别的不同上下文之间。上下文切换的详细过程保......
  • Docker 学习笔记-基本概念与安装
    Docker学习笔记基本概念镜像:Docker的镜像概念类似于虚拟机里的镜像,是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。DockerFile;镜像可以基于DockerFile构建,DockerFile是一个描述文件,里面包含若干条命令,每条命令都会对基础文件系统创建新......
  • 数据结构之——二叉树
    一、二叉树的基本概念        二叉树是数据结构中的重要概念,每个节点最多有两个子树,分别为左子树和右子树。这种结构具有明确的层次性和特定的性质。二叉树有五种基本形态:空二叉树:没有任何节点。只有一个根结点的二叉树:仅有一个节点作为整个树的根。只有左子树:根节......
  • New Phytologist | 红杉的基因组选择:从概念验证到实际应用
    分享一篇最近发表《NewPhytologist》上一篇文章:Genomicselectioninwesternredcedar:fromproofofconcepttooperationalapplication。文章主要研究了基因组选择(GS)在西部红杉(westernredcedar,WRC,即Thujaplicata)中的应用,从概念验证到实际操作的全过程。研究背景森林......
  • LeetCode hot100-二叉树篇思路总结
    跌跌撞撞看代码随想录看leetcode官方题解,终于写完了hot100的二叉树部分。这是我第一次学习如何正式的用java去写一个二叉树首先在自己的编译器里定义一个TreeNode类,以便于后面刷题的时候复用publicclassTreeNode{intval;TreeNodeleft;TreeNoderight;......
  • RocketMQ 必知概念
    延迟消息延迟等级官方默认设置了18哥延迟等级1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h发送延迟消息:按照默认顺序1-18数字就对应上面的延迟时间Messagemsg=newMessage(TOPIC,TAG,"OrderID199","ok",getBytes(StandardCharsets.UTF_8));//......
  • 62.《树和二叉树简阐论》
    是的这是一篇迟来的树与二叉树阐述总结看到博客园的情况不知道是否是最后一篇但无论如何都应该不感慨简单看树二叉树森林先看一些头疼的概念(自我总结):树:n个结点的有限集二叉树:在树的基础上每个结点最多有两个子树森林:m棵不相交树的集合所有都是在树的基础上衍生出......