一、树定义
树:n个节点的有限集合,非空树(n>0)满足:有且只有一个根节点;n>1时,除去根节点的m个节点本身又是一棵树,为子树;树是递归的,除根节点外每个节点都有一个前驱节点;除叶节点外每个节点都有>=1个后继节点。
祖先:任意节点x,从根节点到节点x的所有节点都是x的祖先(节点x也是自己的祖先)
父节点:如果节点含有子节点,则这个节点称为其子节点的父节点
兄弟节点:拥有共同父节点的节点互称兄弟节点
子节点:一个节点含有的子树的根节点称为该节点的子节点
后代:任意节点x,从节点x到叶子节点的所有节点都是x的后代(节点x也是自己的后代)
节点的层次:根节点为第一层,根节点的子节点为第二层,以此类推
度:节点的子节点树数目就是节点的度
叶节点:度为零的节点为叶节点
节点深度:对任意节点x,x节点的深度表示根节点到x节点的路径长度。所以根节点深度为0,第二层节点深度为1,以此类推
节点高度:对任意节点x,叶子节点到x节点的路径长度就是节点x的高度
树的深度:一棵树中节点的最大深度为树的深度,也称高度
森林:m颗互不相交的树构成的集合就是森林
二、树存储
双亲表示
数组下标 | 数据 | 父节点 |
0 | A | -1 |
1 | B | 0 |
2 | C | 0 |
3 | D | 1 |
4 | E | 1 |
5 | F | 2 |
6 | G | 2 |
7 | H | 3 |
8 | I | 3 |
9 | J | 4 |
10 | K | 4 |
孩子表示
孩子兄弟表示
三、二叉树
定义
二叉树:有序树;每个节点最多有2个子节点,子节点有左右之分。二叉树第i层有2^(i - 1)个节点。假如二叉树深度为K,则二叉树最多有2^(K - 1)个节点。
存储
顺序存储:二叉树,存储为一维数组如下图所示:
不完全二叉树存储为下图所示:
链式存储同上孩子兄弟表示
分类
满二叉树:除叶子节点外的所有节点都有两个子节点,并且所有叶子节点都在同一层
完全二叉树:除最后一层叶子节点可能有一个子节点外,其他所有层的节点有两个子节点
二叉搜索树:左子树的所有节点都小于根节点,右子树的所有节点都大于根节点
平衡二叉树:左右子树的高度差不超过某个固定值。常见的平衡二叉树有红黑树、AVL树等,它们旨在提供更快的插入、删除和查找操作
二叉堆:满足堆序性质的完全二叉树,常用于实现优先队列和堆排序算法
线索二叉树:通过添加额外的指针(线索)来提高遍历效率,使得可以直接找到节点的前驱和后继节点
遍历
先序遍历:
先根节点,再遍历完左子树,最后到右子树
A->B->D->G->H->C->E->I->F
中序遍历
G->D->H->B->A->I->E->C->F
后序遍历
G->H->D->B->I->E->F->C->A
层次遍历
A->B->C->D->E->F->G->H->I