数据结构——二叉树和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. 子树又是二叉搜索数

相关推荐
Darling噜啦啦2 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠3 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾3 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
Qres8214 天前
算法复键——树状数组
数据结构·算法
牛油果子哥q4 天前
并查集(DSU)超精讲,路径压缩、按秩合并、万能模板、连通性判定、最小生成树与刷题实战全解
数据结构·c++·最小生成树·并查集
凌波粒4 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
WL学习笔记4 天前
单项不带头不循环链表
数据结构·链表
小糯米6014 天前
JS 数组
数据结构·算法·排序算法
小欣加油4 天前
leetcode3612 用特殊操作处理字符串I
数据结构·c++·算法·leetcode·职场和发展
凌波粒4 天前
LeetCode--90.子集II(回溯算法)
数据结构·算法·leetcode