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

题外话

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

今天正式进入二叉树

正题

树型结构概念

树是一种非线性的数据结构,它是由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层

小结

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

相关推荐
C++忠实粉丝10 分钟前
计算机网络socket编程(4)_TCP socket API 详解
网络·数据结构·c++·网络协议·tcp/ip·计算机网络·算法
daiyang123...2 小时前
测试岗位应该学什么
数据结构
kitesxian2 小时前
Leetcode448. 找到所有数组中消失的数字(HOT100)+Leetcode139. 单词拆分(HOT100)
数据结构·算法·leetcode
薯条不要番茄酱4 小时前
数据结构-8.Java. 七大排序算法(中篇)
java·开发语言·数据结构·后端·算法·排序算法·intellij-idea
盼海6 小时前
排序算法(五)--归并排序
数据结构·算法·排序算法
搬砖的小码农_Sky12 小时前
C语言:数组
c语言·数据结构
先鱼鲨生14 小时前
数据结构——栈、队列
数据结构
一念之坤14 小时前
零基础学Python之数据结构 -- 01篇
数据结构·python
IT 青年14 小时前
数据结构 (1)基本概念和术语
数据结构·算法
熬夜学编程的小王14 小时前
【初阶数据结构篇】双向链表的实现(赋源码)
数据结构·c++·链表·双向链表