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

题外话

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

今天正式进入二叉树

正题

树型结构概念

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

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

二叉树性质

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

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

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

  1. 具有n个结点的完全二叉树的深度k为 上取整,如上图,,深度为3
  1. 对于具有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

解析:完全二叉树中,除去最后一层,每层的结点数一定是该层最大值,所以要利用

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

小结

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

相关推荐
苦 涩3 小时前
考研408笔记之数据结构(七)——排序
数据结构
Victoria.a5 小时前
顺序表和链表(详解)
数据结构·链表
笔耕不辍cj6 小时前
两两交换链表中的节点
数据结构·windows·链表
csj506 小时前
数据结构基础之《(16)—链表题目》
数据结构
謓泽7 小时前
【数据结构】二分查找
数据结构·算法
攻城狮7号7 小时前
【10.2】队列-设计循环队列
数据结构·c++·算法
写代码超菜的8 小时前
数据结构(四) B树/跳表
数据结构
小小志爱学习9 小时前
提升 Go 开发效率的利器:calc_util 工具库
数据结构·算法·golang
egoist20239 小时前
数据结构之堆排序
c语言·开发语言·数据结构·算法·学习方法·堆排序·复杂度
小猿_009 小时前
C语言程序设计十大排序—希尔排序
数据结构·算法·排序算法