【数据结构与算法】树和二叉树

news2024/11/30 10:30:13

1 树

1.1 术语

  • 关系术语

    孩子结点 —— 子树的根
    父结点
    兄弟结点 —— 同一个结点的孩子结点互为兄弟
    祖先结点
    后代结点

  • 层次类术语

    根的层次为1
    其余结点的层次为其父结点层次加1
    高度/深度 —— 整个树中结点的最大层次
    度 —— 结点的孩子数目称为结点的度
    叶子(终结点)—— 度为0
    分支结点 —— 度不为0的结点(非叶子结点)
    树的度 —— 最大的结点度
    森林 —— 多棵树
    有序树/无序树 —— 按照兄弟结点之间的排列是否有序

1.2 表示法

二叉链表表示法,或二叉树表示法

在这里插入图片描述
在这里插入图片描述

1.3 结点数目

已知一棵树的度为4,其中度为4的结点的数目为3,度为3的结点的数目为4,度为2的结点的数目为5,度为1的结点的数目为2,请求出该树中的叶子结点的数目。

设叶子的节点数为 n 0 n_0 n0,度为1的节点数为 n 1 n_1 n1,度为2的节点数为 n 2 n_2 n2,度为3的节点数为 n 3 n_3 n3,度为4的节点数为 n 4 n_4 n4,总节点数为 n n n,则可得到
n = n 0 + n 1 + n 2 + n 3 + n 4 (1) n=n_0+n_1+n_2+n_3+n_4\tag{1} n=n0+n1+n2+n3+n4(1)
设树的总入度为 m m m。由于在树中除了根结点外,其余每一个结点都有唯一的一个分支进入,则树的总结点数为
n = m + 1 (2) n=m+1\tag{2} n=m+1(2)
又由于树中这m个进入分支分别由非叶子结点射出,其中度为1的结点射出1,度为2的结点射出 2,依此类推。而且射出分支总数与总的进入分支数相等,即
m = n 1 + 2 n 2 + 3 n 3 + 4 n 4 (3) m=n_1+2n_2+3n_3+4n_4\tag{3} m=n1+2n2+3n3+4n4(3)
由式(1)、(2)、(3)可以得到
n 0 = n 2 + 2 n 3 + 3 n 4 + 1 = 5 + 2 × 4 + 3 × 3 + 1 = 23 n_0=n_2+2n_3+3n_4+1=5+2\times 4+3\times3+1=23 n0=n2+2n3+3n4+1=5+2×4+3×3+1=23

2 二叉树

  • 二叉树与树的区别

    是两种不同性质的结构
    二叉树存在空树
    二叉树恰有两个子树,树可有多个
    二叉树子树有序,树无序

  • 二叉树的五种形态

    (1)空树,即结点数为0
    (2)单结点二叉树,即仅有一个结点
    (3)左子树为空右子树不空
    (4)右子树为空左子树不空
    (5)左右子树均不空

2.1 二叉树

2.1.1 二叉树性质

  1. 第i层节点数 ≤ 2 i − 1 \le 2^{i-1} 2i1
  2. 高度为 k ( k ≥ 1 ) k (k\ge 1) k(k1)的二叉树的结点总数 ≤ 2 k − 1 \le 2^k-1 2k1
  3. 设二叉树的叶子结点数为 n 0 n_0 n0,度为2的结点数为 n 2 n_2 n2,则 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1

已知一棵二叉树中,有20个叶子结点,10个结点只有左孩子,15个结点只有右孩子,求该二叉树的总结点数。

n 0 = 20 , n 2 = n 0 − 1 = 20 − 1 = 19 n_0=20, n_2=n_0-1=20-1=19 n0=20,n2=n01=201=19
n 1 = n l + n r = 10 + 15 = 25 n_1=n_l+n_r=10+15=25 n1=nl+nr=10+15=25
n = n 0 + n 1 + n 2 = 20 + 25 + 19 = 64 n=n_0+n_1+n_2=20+25+19=64 n=n0+n1+n2=20+25+19=64

2.1.2 二叉树遍历

已知一棵二叉树的先序序列和中序序列,要求还原该二叉树。
先序:ABCDEFG
中序:CDBEAGF
关键在于找根
已知中序序列和后序序列,或中序序列和先序序列,可以唯一确定一棵二叉树
而已知先序序列和后序序列不能唯一确定二叉树

在这里插入图片描述

先序和后序相同

空树或者只有根节点的二叉树。

先序和后序相反

(1)当且仅当二叉树中只有一个叶子节点。
(2)二叉树的高度和其节点个数相同。

先序和中序相同

空树或缺左子树的单支二叉树。

先序和中序相反

(1)二叉树为空或者只有一个节点。
(2)若二叉树不为空 则任意节点不能同时拥有左孩子和右孩子 上面那个二叉树留下FBE。
(3)若二叉树不为空 则任意节点没有右孩子。

中序和后序相同

空树或者缺右子树的单支二叉树。

中序和后序相反

任意节点没有左孩子节点。

先序序列中最后一个结点是叶子结点。TRUE
后序序列中第一个结点是叶子结点。TRUE
中序序列中第一个结点是叶子结点。FALSE

2.2 满二叉树 完全二叉树 非完全二叉树

  • 满二叉树:称高度为 k k k且有 2 k − 1 2^k-1 2k1个结点的二叉树为满二叉树

  • 完全二叉树

在满二叉树最下一层从右到左依次连续去掉若干个结点的二叉树称为完全二叉树
编号的方式:从上到下,每一层中从左到右,根节点编号为1

  1. 有n个(n≥1)结点的完全二叉树的高度为 ⌊ log ⁡ 2 n ⌋ + 1 \lfloor \log_2{n} \rfloor+1 log2n+1
  2. 对完全二叉树进行编号,则对编号为 i i i的结点,若存在左孩子结点,则其左孩子结点的编号为 2 i 2i 2i,若存在右孩子结点,则其右孩子结点的编号为 2 i + 1 2i+1 2i+1,若存在父结点,则其父结点的编号为 ⌊ i / 2 ⌋ \lfloor i/2 \rfloor i/2

求100个结点的完全二叉树的叶子结点数。

根据性质4,从编号51到100都是叶子。共有50个叶子。

已知完全二叉树的第7层有10个结点,问共有多少个结点?多少个叶子结点?多少个度为1的结点?

共有 2 6 − 1 + 10 = 73 2^6-1+10=73 261+10=73个结点。
叶子求法:
方法1、37到73都是叶子,共37个叶子结点;
方法2、第7层10个结点都是叶子,第6层有32个结点,其中5个结点是第7层10个结点的父亲,
所以共有 10 + 32 − 5 = 37 10+32-5=37 10+325=37个叶子结点。
度为1的结点数为0。

判断题:完全二叉树最多有1个度为1的结点。( True )
编号为i、j的两个结点是否在同一层的条件是 ⌊ log ⁡ 2 i ⌋ = ⌊ log ⁡ 2 j ⌋ \lfloor \log_2 i\rfloor=\lfloor \log_2 j\rfloor log2i=log2j

3 哈夫曼树

  • 定义

给定一组数值 w 1 , w 2 , . . . , w n {w_1, w_2,...,w_n} w1,w2,...,wn,作为叶子结点的权值构造一棵二叉树。
若二叉树满足 W P L = ∑ i = 1 n w i L i WPL=\sum_{i=1}^{n}w_iL_i WPL=i=1nwiLi 最小
(其中 L i L_i Li w i w_i wi对应的叶子结点到根结点的路径长度)
则称此二叉树为最优二叉树,也称哈夫曼树,并称WPL为带权路径长度。

  • 性质

任意一棵哈夫曼树的带权路径长度均等于所有分支结点权值之和。

以集合{3,4,5,6,8,10,12,18}为叶子结点的权值构造哈夫曼树,并计算其带权路径长度。

在这里插入图片描述

4 开始练习吧

  1. 画出由4个结点所构成的所有形态的树(假设是无序树)。

  2. 已知一棵树的度为4,其中度为4的结点的数目为3,度为3的结点的数目为4,度为2的结点的数目为5,度为1的结点的数目为2,请求出该树中的叶子结点的数目。

  3. 如果已知一棵二叉树有20个叶子结点,有10个结点仅有左孩子,15个结点仅有右孩子,求出该二叉树的结点数目。

  4. 已知某完全二叉树有100个结点,试用三种不同的方法求出该二叉树的叶子结点数。

  5. 如果已知完全二叉树的第6层有5个叶子,试画出所有满足这一条件的完全二叉树,并指出结点数目最多的那棵完全二叉树的叶子结点数目。

  6. 在编号的完全二叉树中,判断编号为i和j的两个结点在同一层的条件是什么?

  7. 设计算法以求解编号为i和j的两个结点的最近的公共祖先结点的编号。

  8. 分别描述满足下面条件的二叉树的特征:
    (1)先序序列和中序序列相同。
    (2)先序序列和后序序列相反。

  9. 证明:由二叉树的先序序列和中序序列能唯一确定一棵二叉树,并分别由下面的两个序列构造出相应的二叉树:
    ①先序:ABCDEFGHI 中序:ADECFBGIH
    ②先序:ABCDEFGHIJ 中序:BDECAGIJHF

  10. 证明:由二叉树的后序序列和中序序列能唯一确定一棵二叉树,并分别由下面的两个序列构造出相应的二叉树:
    ①后序:DCFEBIHGA 中序:DCBFEAGHI
    ②后序:DECBGIHFA 中序:DCEBAFHGI

  11. 设计算法以实现将以二叉链表形式存储的树(森林)转换为对应的双亲表示形式。

  12. 已知树(森林)的高度为4,所对应的二叉树的先序序列为ABCDE,请构造出所有满足这一条件的树或森林。

  13. 设计算法将一个以孩子链表形式表示的森林转换为二叉链表形式。

  14. 设计算法按先序次序输出森林中每个结点的值及其对应的层次数。

  15. 设计算法以求解森林的高度。

  16. 设计算法以输出森林中的所有叶子结点的值。

  17. 设计算法逐层输出森林中的所有结点的值。

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

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

相关文章

Smartbi携手广州轻工集团打造集团价值创造型总部

广州轻工工贸集团有限公司(简称“广州轻工集团”)是广州市第一家工贸合一的大型企业集团公司,最早起源于1950年9月成立的广州市合作事业管理局,逐渐演化形成广州市轻工业局。1995年10月,广州市轻工业局成建制改建为经济…

spring-transaction源码分析(3)Transactional事务失效原因

问题概述 在Transactional方法中使用this方式调用另一个Transactional方法时&#xff0c;拦截器无法拦截到被调用方法&#xff0c;严重时会使事务失效。 类似以下代码&#xff1a; Transactional public void insertBlogList(List<Blog> blogList) {for (Blog blog : …

【人工智能】在VScode中使用AI插件Bito,功能与ChatGPT类似

文章目录 前言一、到官网下载VScode软件二、VScode软件安装步骤三、Bito插件下载与VScode软件中的使用四、注册Bito 前言 之前在VScode中使用ChatGPT中文版&#xff0c;后来要注册与收费&#xff0c;可采用一些ChatGPT中文版的替代插件。 后发现BitoAI插件功能同样强大&#…

港联证券|断臂、收缩、变阵 “中植系”何去何从?

经历灵魂人物猝然离世的巨震&#xff0c;国内最老牌资本系之一的“中植系”&#xff0c;尚未显露出穿越周期的企稳之象&#xff0c;似仍在风雨飘摇。 投资端&#xff0c;随着监管持续升级与注册制改革全面推进&#xff0c;“中植系”惯用“PE上市公司”以低买高卖的资本套利模式…

流水线三维可视化运维,装配自动化提质增效 | 设备产线管理合集

为大家带来图扑智慧生产线/设备流水线合集。依托图扑对设备加工、物流输送、车辆装配等多个车间流水线进行 3D 可视化展示&#xff0c;通过数字孪生技术推动行业数字化转型升级。 智慧仓储产线 智慧仓储产线通过对仓储现场的数字化建模&#xff0c;利用先进的物联网、大数据、…

外贸网站Magento存在漏洞导致网站被攻击入侵的防护办法

Magento是最受欢迎的外贸电商框架之一&#xff0c;很多企业已经在其基础上进行了二次开发。然而&#xff0c;对于使用2.x版本的老系统来说&#xff0c;安全问题也成为了一大难题。有些客户在找我们SINESAFE做网站安全服务之前&#xff0c;客户也找过建站的公司去清除后门&#…

学习CSS3实现夜空UFO特效,带着心上人去太空旅行

记得那是在一个夜晚&#xff0c;我下班比较晚&#xff0c;行走在空荡的街道&#xff0c;不由想起了何润东“直到整条街上剩我和路灯”的歌声&#xff0c;就这么往前走着。我走哇走&#xff0c;走哇走&#xff0c;突然&#xff0c;一道光划过&#xff0c;你猜我看见了什么&#…

GNN图神经网络

文章目录 GNN图神经网络的元素消息传递方式 GCN消息传递方式 GAT消息传递机制 GNN 图神经网络的元素 节点&#xff0c;邻接矩阵 为什么要计算多层 邻居的邻居&#xff0c;融合多阶邻居特征 消息传递方式 图神经网络是一个相对宽泛的概念&#xff0c;本质是每个节点embeddi…

【Linux】Linux下安装Docker(图文解说详细版)

文章目录 一、前言二、Docker的三要素Docker镜像Docker仓库Docker容器 三、Docker的安装1. 确定Linux版本2.安装Docker3.测试是否安装成功4.配置下载docker镜像的仓库5.测试HelloWorld镜像 一、前言 Docker是近年来新兴的虚拟化工具&#xff0c;它可以和虚拟机一样实现资源和系…

【教程】用 HTML JavaScript 制作 2.5D 迷宫游戏地图

我写了一个能够随机生成迷宫的算法&#xff0c;得到了用户很好的反响&#xff0c;对大家有所帮助。我现在想将这个迷宫以2.5D游戏地图的方式呈现出来。最初我考虑使用CSS来实现这个目标&#xff0c;但效果并不太理想&#xff0c;因为我无法只将它渲染成背景&#xff0c;而不对整…

洛谷B2096 直方图

直方图 题目描述 给定一个非负整数数组&#xff0c;统计里面每一个数的出现次数。我们只统计到数组里最大的数。 假设 F m a x &#xff08; F m a x ≤ 100000 &#xff09; Fmax&#xff08;Fmax \le 100000&#xff09; Fmax&#xff08;Fmax≤100000&#xff09;是数组…

scratch绘制直尺 中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析2023年3月

目录 scratch绘制直尺 一、题目要求 1、准备工作 2、功能实现 二、案例分析

NSSCTF之Misc篇刷题记录⑨

NSSCTF之Misc篇刷题记录⑨ [GKCTF 2021]签到[NISACTF 2022]bmpnumber[领航杯江苏省赛 2021]签到题[鹤城杯 2021]Misc2[鹤城杯 2021]A_MISC[GXYCTF 2019]CheckIn[HDCTF 2023]hardMisc[NSSRound#1 Basic]cut_into_thirds[闽盾杯 2021]Modbus的秘密[NISACTF 2022]神秘数字[INSHack…

asp.net+C#超市商品进销存管理系统

本超市商品管理系统主要超市内部提供服务&#xff0c;系统分为管理员员工两部分。 本研究课题重点主要包括了下面几大模块&#xff1a;管用户登录&#xff0c;员工管理&#xff0c;商品管理&#xff0c;进货管理&#xff0c;销售管理&#xff0c;供应商信息&#xff0c;会员信…

2023年6月DAMA-CDGP数据治理专家认证考试,火热报名中

目前6月18日CDGA&CDGP考试目前开放的城市有&#xff1a;北京、上海、广州、深圳、长沙、呼和浩特、杭州、南京、济南、成都、西安、武汉、天津。 新增了武汉、天津这2个城市。另外合肥、厦门、长春等地区还在接近开考人数中&#xff0c;打算参加6月考试的朋友们可以抓紧时间…

前端HTML学习笔记(一)

1、基础知识 网页概述&#xff1a;1、HTML概念&#xff1a;HTML (Hyper Text Markup Language)中文译为超文本标记语言专门用于网页开发的语言&#xff0c;主要通过HTML标签对网页中的文本、图片、音频、视频等内容进行描述。2、网页通常由文字、图片、音频、视频、超链接等部…

Julia入门-0、在Windows下安装Julia

文章目录 0、前言1、相关网站2、Windows 系统下安装Julia3、Julia 交互式命令窗口 0、前言 Julia 是一个面向科学计算的高性能动态高级程序设计语言。 Julia 最初是为了满足高性能数值分析和计算科学的需要而设计的&#xff0c;不需要解释器&#xff0c;速度快。 1、相关网站…

C++类与对象Plus

我们之前讲的都是类与对象的基础&#xff0c;以及类中的几个默认函数等&#xff0c;今天我们就讲一下类与对象的其他东西 初始化列表 在我们的默认构造函数的时候&#xff0c;我们在初始化的时候我们都是在构造函数中完成我们的初始化任务 我们现在来看一个类 我们看一下我们…

基于 LSTM 进行多类文本分类( TensorFlow 2.0)

NLP 的许多创新是如何将上下文添加到词向量中。一种常见的方法是使用循环神经网络。以下是循环神经网络的概念&#xff1a; 他们利用顺序信息。他们可以捕捉到到目前为止已经计算过的内容&#xff0c;即&#xff1a;我最后说的内容会影响我接下来要说的内容。RNNs 是文本和语音…

mac下删除python3.7,并将版本更新到3.9

如何卸载python3.7 有些小伙伴想直接从3.7升级到3.9 那恐怕是不行的&#xff0c;python3.7的库占的空间不少&#xff0c;所以首先我们应该来删除它. python安装后的路径分类 在删除之前需要先了解&#xff1a;python安装后有几类路径需要我们去查看删除 python存储库路径&am…