数据结构之二叉树由浅入深(一)

news/2024/7/24 12:39:08 标签: 数据结构

题外话

我知你深浅,你却不知我长短

今天正式进入二叉树

正题

树型结构概念

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看 起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

它具有以下的特点:

有一个特殊的结点,称为根结点,根结点没有前驱结点

除根结点外,其余结点被分成M(M > 0)个互不相交的集合T1、T2、......、Tm,其中每一个集合Ti (1 又是一棵与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继

树是递归定义的。

注意子树不能相交

除了根节点外每个节点有且只有一个父节点

一颗N个节点的树有N-1条边

二叉树概念

一棵二叉树是结点的一个有限集合,该集合: 1. 或者为空 2. 或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。

原则:

1. 二叉树不存在度大于2的结点

2. 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树

二叉树的组成概念(如上图)

根节点:一棵树没有双亲的节点如A

节点的度:一个节点含有子树的个数称为该节点的度,如A有两个子树,A的度为2

树的度;一棵树拥有节点度的最大值,上图树的度为2

叶子结点或终端节点:叶子节点就是度为0的节点,该节点没有子树,如E,F,G,H

非终端结点或分支结点:度不为0的结点; 如上图:B,C,D等节点为分支结点

双亲节点或父节点:若一个节点含有子节点,那么该节点就是子节点的父节点,A是B的父节点

孩子节点或子节点:一个节点有根节点,则该节点为根节点的孩子节点,D是B的孩子节点

节点的层次:从根节点开始为第一层,往下逐次加1

树的高度或深度:树的节点最大层次,如上图树的高度为4

兄弟节点:具有相同父节点的节点为兄弟节点,如DE是兄弟节点

结点的祖先:从根到该结点所经分支上的所有结点;如上图:A是所有结点的祖先

树的表示形式

树有很多种表示方式,常见的有:双亲表示法, 孩子表示法、孩子双亲表示法、孩子兄弟表示法等等。

两种特殊二叉树

1. 满二叉树: 一棵二叉树,如果每层的结点数都达到最大值,则这棵二叉树就是满二叉树。也就是说,如果一棵 二叉树的层数为K,且结点总数是 2^k-1,则它就是满二叉树。(如上图)

2. 完全二叉树: 完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n 个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从0至n-1的结点一一对应时称之为完全二叉树。(如上图)

要注意满二叉树是一种特殊的完全二叉树。

二叉树性质

1. 若规定根结点的层数为1,则一棵非空二叉树的第i层上最多有2^(k-1 )(i>0)个结点,如上图第三层为4个节点

2. 若规定只有根结点的二叉树的深度为1,则深度为K的二叉树的最大结点数是2^k-1 (k>=0),如上图,深度为3的二叉树,最大节点数为2^k-1=2^3-1=7

3. 对任何一棵二叉树, 如果其叶结点个数为 n0, 度为2的非叶结点个数为 n2,则有n0=n2+1

(叶子数等于度为2的节点数+1)

4. 具有n个结点的完全二叉树的深度k为 log_{2}(n)+1上取整,如上图,log_{2}(7)+1,深度为3

5. 对于具有n个结点的完全二叉树,如果按照从上至下从左至右的顺序对所有节点从1开始编号,则对于序号为i 的结点有: 若i>1,双亲序号:i/2;i=1,i为根结点编号,无双亲结点

若2i<n,左孩子序号:2i,否则无左孩子

若2i+1>n,右孩子序号:2i+1,否则无右孩子

二叉树基础练习题

大家只要掌握了二叉树,完全二叉树的性质,这几道题很简单,而且很有趣味

1. 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为(B)

A 不存在这样的二叉树 B 200 C 198 D 199

解析:二叉树中叶子树等于结点数+1

2.在具有 2n 个结点的完全二叉树中,叶子结点个数为(A)

A n B n+1 C n-1 D n/2

解析:完全二叉树中,第2n个结点父节点为2n/2=n,第2n-1个结点的父节点是n-1,也就是说从n+1到2n都是叶子结点,也就是2n-(n+1)+1=n个

3.一个具有767个节点的完全二叉树,其叶子节点个数为(B)

A 383 B 384 C 385 D 386

解析:如果上一道题没理解,那这道题你一定会懂,同样是完全二叉树,第767结点的父结点为767/2=383

而766结点的父结点为766/2=383

而765结点的父结点为382

从767开始往前的结点是有父结点的

从384开始往后的结点是没有孩子结点的

所以从384到767全是叶子节点,767-384+1=384(记得要把第384结点算上所以+1)

4.一棵完全二叉树的结点数为531个,那么这棵树的高度为(B)

A 11 B 10 C 8 D 12

解析:完全二叉树中,除去最后一层,每层的结点数一定是该层最大值,所以要利用log_{2}(n)+1

算出结果为9,第9层为512个结点,剩下531-512=19个结点在第10层

小结

这篇文章就到此结束了,都是我个人作题作词作图,喜欢的朋友请多多关注哦!!


http://www.niftyadmin.cn/n/5447577.html

相关文章

C++类的6个默认成员函数(构造)

C类和对象基础-CSDN博客https://blog.csdn.net/lh11223326/article/details/136834917?spm1001.2014.3001.5501 目录 1.构造函数 概念 特性 2.析构函数 概念 特性 3.拷贝构造函数 概念 特征 4.赋值运算符重载&#xff08;构造实现&#xff09; 运算符重载 赋值运算…

构造器注入和Autowired注入的区别

在Spring框架中&#xff0c;构造器注入(Constructor Injection)和Autowired注入(Autowired Injection)是两种常用的依赖注入方法。它们主要的区别在于注入方式、时机和使用场景&#xff1a; 构造器注入(Constructor Injection) 方式&#xff1a;通过类的构造器来注入依赖&…

XSS一-WEB攻防-XSS跨站反射型存储型DOM型标签闭合输入输出JS代码解析

演示案例&#xff1a; XSS跨站-输入输出-原理&分类&闭合XSS跨站-分类测试-反射&存储&DOM #XSS跨站-输入输出-原理&分类&闭合 漏洞原理&#xff1a;接受输入数据&#xff0c;输出显示数据后解析执行 基础类型&#xff1a;反射(非持续)&#xff0c;存储(…

深入理解Redis的Sentinel机制

Sentinel简述 Sentinel为了解决什么问题&#xff1f; Sentinel&#xff08;哨岗、哨兵&#xff09;是Redis的高可用性&#xff08;high availability&#xff09;解决方案。 我们知道Redis 的主从复制模式可以将主节点的数据改变同步给从节点&#xff0c;这样从节点就可以起…

2024淘天阿里妈妈算法工程师一面&二面 面试题

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何备战、面试常考点分享等热门话题进行了深入的讨论。 今天我们…

c++ 线程池/Github 开源项目源码分析(progschj/ThreadPool)

c 线程池/Github 开源项目源码分析&#xff08;progschj/ThreadPool&#xff09; 前言[ThreadPool 项目地址](https://github.com/progschj/ThreadPool)项目源码&#xff1a;基本用法类成员变量类成员函数构造函数的签名创建线程线程默认的任务向任务队列中添加一个任务析构函数…

智能新纪元:AI大模型学习的奥秘与挑战

在当前技术环境下&#xff0c;AI大模型学习不仅要求研究者具备深厚的数学基础和编程能力&#xff0c;还需要对特定领域的业务场景有深入的了解。通过不断优化模型结构和算法&#xff0c;AI大模型学习能够不断提升模型的准确性和效率&#xff0c;为人类生活和工作带来更多便利。…

Python的re模块进行正则表达式操作时的常用方法[回顾学习]

re 模块是 Python 中用于处理正则表达式的标准库模块。通过 re 模块&#xff0c;可进行字符串匹配、搜索和替换等各种操作。 有几个常用的方法&#xff1a;# re.match(pattern, string)&#xff1a;从字符串开头开始匹配模式&#xff0c;并返回匹配对象。适合用于确定字符串是否…