数据结构——二叉树和BST

树与二叉树

基本概念

树是一种非线性结构,其严格的数学定义是:如果一组数据中除了第一个节点(第一个节点称为根节点,没有直接前驱节点)之外,其余任意节点有且仅有一个直接前驱,有零个或多个直接后继,

这样的一组数据形成一棵树。这种特性简称为一对多的逻辑关系。即用于描述具有层次关系,类似组织架构关系的一种数据结构。

树的组成:根,分支,叶子

常见例子

日常生活中,很多数据的组织形式本质上是一棵树。比如一个公司中的职员层级关系,一个学校中的院系层级关系,淘汰赛中的各次比赛队伍,一个家族中的族谱成员关系等,这些都是树状逻辑结构。由于树状结构表现出来都是具有层次的,因此也被称为层次结构。

相关术语

通常,在逻辑上表达一棵抽象的树状结构的时候,习惯于将树根放在顶部,树枝树杈向下生长,如下图所示。

对于一棵树来说,有如下基本术语:

1. 结点:

树中的元素 及其子树

2. 根(root):

树的第一个节点,没有直接前驱。如上图中的A。

3. 双亲节点/父节点(parent):

某节点的直接前驱称为该节点的双亲节点,或成为父节点。例如上图中A是B的父节点。

4. 孩子节点/子节点(child):

某节点的直接后继称为该节点的孩子节点。例如上图中B、C、D均为A的孩子节点。

5. 节点的层次(level):

根节点所在的层次规定为第1层,其孩子所在的层次为第2层,后代节点以此类推。比如上图中节点E的层次是3。

6. 节点的度(degree):

一个节点拥有的孩子节点的总数,称为该节点的度。比如上图中节点B的度为2。

7. 叶子(leaf):

一棵树中度等于0的节点,被称为叶子,又称为终端节点。比如上图中K、L、F、G、M、I、J均为叶子。

8. 树的高度(height):

一棵树中所有节点的层次的最大值,称为这棵树的高度,又称为树的深度。比如上图的树的高度为4。

9. 有序树与无序树:

一棵树中,如果某个节点的孩子节点之间是有次序的,则称这棵树为有序树,反之称为无序树。

二叉树

在各种不同的树状结构中,最常见也最重要的是二叉树(Binary Tree),下面是二叉树的定义:

有序树

任意节点的度小于等于2

比如如下这棵树就是一棵二叉树。其中8是根节点,14是10的右孩子(因为二叉树是有序树,因此严格区分左右),而13则是14的左孩子。

为了方便对二叉树进行操作,通常会对一棵它进行标号:从上到下,从左到右进行标号;

注意: 没有孩子节点的地方也要标出来
对于二叉树而言,有如下特性:

  1. 第i层上,最多有2^(i−1)个节点。

  2. 高度为k的二叉树,最多有2^k−1个节点。

  3. 假设叶子数目为n0,度为2的节点数目为n2,则有:n0 = n2+1

二叉树的一般结构:

满二叉树

一棵深度为k,且有2^k-1个结点的二叉树,称为满二叉树。这种树的特点是每一层上的结点数都是最大结点数。

**简单理解:**除了叶子节点之外,其余节点的度都为2;其特点是: 如果深度为 K,则节点数为 2^K - 1。

完全二叉树

在一棵二叉树中,除最后一层外,若其余层都是满的,或者最后一层是满的,或者是最后一层在右边缺少连续若干结点,则此二叉树为完全二叉树。

**简单理解:**除最后一层叶子节点外。是一颗满二叉树,最后一层由右向左有连续缺省的0个,1个或多个节点。

二叉搜索树(BST)

特点:

  1. 如果节点具有左子树,则左子树上所有节点都不大于该节点的值;

  2. 节点具有右子树,则右子树上所有节点都不小于该节点的值;

  3. 子树又是二叉搜索数

相关推荐
怀旧,1 小时前
【数据结构】8. 二叉树
c语言·数据结构·算法
凤年徐3 小时前
【数据结构与算法】203.移除链表元素(LeetCode)图文详解
c语言·开发语言·数据结构·算法·leetcode·链表·刷题
浩瀚星辰20244 小时前
C++树状数组详解
java·数据结构·算法
起个数先5 小时前
快速排序算法(Java)
数据结构·排序算法
chao_78913 小时前
二分查找篇——搜索旋转排序数组【LeetCode】两次二分查找
开发语言·数据结构·python·算法·leetcode
秋说15 小时前
【PTA数据结构 | C语言版】一元多项式求导
c语言·数据结构·算法
谭林杰16 小时前
B树和B+树
数据结构·b树
卡卡卡卡罗特17 小时前
每日mysql
数据结构·算法
chao_78918 小时前
二分查找篇——搜索旋转排序数组【LeetCode】一次二分查找
数据结构·python·算法·leetcode·二分查找