树:
1.树的概述
2.二叉树概述
3.二分搜索树
4.堆和优先队列
5.线段树
6.Trie前缀树
7.并查集
8.AVL树
9.红黑树
树的定义:
树(Tree) 是n (n≥0) 个结点的有限集。当n=0时称为空树。在任意一颗非空树中: (1) 有且仅有一个特定的称为根(root) 的结点; (2) 当n>1时,其余结点可分为m (m>0) 个互不相交的有限集T1、T2、… Tm,其中每一个集合本身又是一颗树,并且称为根的子树(SubTree)。
树结点的分类
结点拥有的子树数称为结点的度(Degree) 。度为0的结点称为叶节点(Leaf)或终端结点;度不为0的结点称为非终端结点或分支结点。除根节点外,分支结点也成为内部节点。树的度是树内各结点的度的最大值。
树结点之间的关系
结点的子树的根称为该结点的孩子(Child) ,相应地,该结点称为孩子的双亲(Parent) 。同一个双亲的孩子之间互称兄弟(Sibling) 。结点的祖先是从根到该结点所经分支,上的所有结点。以某结点为根的子树中任一-结点都称为该结点的子孙。
树的层次
结点的层次(Level) 从根结点开始定义起,根为第一层,根的孩子为第二层。若某结点在第i层,则其子树的根就在i+1层。其双亲在同一层的结点互为堂兄弟。树中结点的最大层次称为树的深度(Depth) 或高度。
二叉树概论:
二叉树的定义: 度最大为2的树:
二叉树(Binary Tree)是n (n≥0)个结点的有限集合,该集合或者空集(称为空二叉树),或者由一个根节点和两棵互不相交的、分别称为根节点的左子树和右子树的二叉树组成。
二叉树的特殊情况-----------斜树
所有的结点都只有左子树的二叉树叫左斜树。所有结点都只有右子树的二叉树叫右斜树
所以在极端情况下二叉树会退化成线性表(线性 表是树的特殊表现形这种情况也称之为非平衡树
二叉树的特殊情况一满-叉树
在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树称为满二叉树
满二叉树是一种平衡二叉树 平衡二叉树 树的最高高度 减去 树的最低高度不能 大于 1;
二叉树的特殊情况一完全二叉树
对一棵具有n个结点的二叉树按层序编号,如果编号为i (1≤i≤n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这颗二叉树称为完全二叉树
二叉树的性质:
1.二叉树的第i层上至多有2i-1 个结点(i>= 1)
2.深度为K的二叉树至多有2k -1 个结点(k>=1)
3.对任何一棵二叉树
如果终端结点数为n0 ,度为2的结点数为 n2 则n0 = n2 + 1
4.具有n个结点的完全二叉树的深度为
5.如果对于一-棵有n个结点的完全二叉树的结点按层序编号
如果i= 1,结点无双亲;如果i> 1,则双亲是[i/2」如果2i> n,则结点i无左孩子;否则其左孩子为2i
如果2i+ 1> n,则结点无右孩子;否则有孩子为2i+ 1
二叉树的顺序存储结构
二叉树的顺序储存结构就是用一维数组存储二叉树中的结点,并且结点的存储位置,也就是数组的下标要能体现出之间的逻辑关系。
二叉树的链式存储结构
二叉树每个结点最多有两个孩子,所以设计为一个数据域和两个指针域的结点进行链接,这种链表也叫作二叉链表。
小记:平衡,满的,完全的用顺序存储结构。其他情况用二叉链。
二叉树的遍历;
深度优先遍历一前 序遍历DLR
规则是若二叉树为空,则空操作返回,否则先访问根节点,然后前序遍历左子树,再前序遍历右子树
深度优先遍历一中 序遍历LDR :
规则是若二叉树为空,则空操作返回,否则从根结点开始,中序遍历根节点的左子树,然后访问根节点,最后中序遍历右子树。
用队列 实现 层次遍历:
依次类推:
栈实现中序遍历:
出栈后顺序。