思维导图
树
树是一种逻辑结构
树是n个结点的有限集合,n=0时,称为空树,任意的非空树满足一下要求:
1)有且仅有一个特定的称为根的结点。
2)当n>1时,其余结点可分为m个互不相交的有限集合,其中每个集合本身又是一棵树,称为根结点的子树,n个结点的树只有n-1条边
3)树个根节点没有前驱结点,除了根节点以外的所有结点都有且仅有一个前驱结点
4)数中的结点有多个或者0个后继结点
树的基本术语
祖先结点,子孙结点,双清结点:k结点,根结点A到K的唯一路径上的任意结点(A,B,E),都是k结点的祖先结点,k是它们的子孙结点,而离k最近的祖先结点E,可称为双亲结点,根结点A是唯一一个没有双亲结点的,拥有共同双亲结点的结点称之为兄弟结点,如K,L
度:树中一个结点的孩子结点个数称之为该节点的度。如B的度为2,D的度为3,数的度:树种最大度数为树的度如图为3
分支结点:度大于0的结点
子结点:度等于0的结点
结点层次:如图根节点为第一层,根结点的子节点为第二层,依次向下,如图
结点的深度:是从根节点开始自顶向下累加的
结点的高度:是从叶结点开始自下向上累加的
数的高度和深度是树种结点的最大层数
有序树指树的结点从左到右是有序的,不能任意更换,无序树是指结点从左到右没有规律,可以互换
路径和路径长度:数的路径是由两个结点之间经过的结点序列,而路径长度是指这个序列的长度,树的路径长度是从根结点到每个结点路径长度的总和。
森林:森林是m颗互不相交的数的集合。
树的性质
树中结点数等于所有结点的度数加1
度为m的树中第i层上至多有mi-1 个结点
高度为h的m叉树至多有(mh -1)/(m-1)个结点
具有n个结点的m叉树的最小高度为log (n(m-1)+1,m)取上限
二叉树
定义:有左孩子和右孩子的树
不同孩子的二叉树不为同一个二叉树,一颗两层的二叉树有5中情况
特殊的二叉树
满二叉树
只有度为2的结点和叶子结点组成的二叉树。高度为h则含有2h -1个结点。从上至下,从左至右编号,双亲结点的编号为孩子结点编号除以二取上限。
完全二叉树
按照满二叉树的编号方式,编号不能间断的二叉树
二叉排序树(二叉搜索树)
所有结点大于左孩子小于右孩子的二叉树
传送门——详细内容
平衡二叉树
任意结点的左孩子和右孩子深度之差不超过1
传送门——详细内容
二叉树的性质
二叉树的存储结构
顺序存储
根据完全二叉树的性质左孩子2i,右孩子为2i+1,顺序表示每个结点的关系
链式存储
一个结点定义两个指针域分别指向左孩子和右孩子
二叉树的遍历
先序遍历
时间复杂度O(n)
中序遍历
后序遍历
层次遍历
出队一个元素压入此元素的左孩子和右孩子
由遍历序列构造二叉树
后序和中序,前序和中序,层次和中序可以构造出二叉树,前序和后序不可以确定一颗二叉树
线索二叉树
线索化
若无左子树,则将左指针指向其前驱结点,若无右子树,则将指针指向后继结点
按照普通的链式存储是无法判断指向的是左孩子还是前驱结点,无法判断是右孩子还是后继结点,所以就要添加一个标志位进行判断
树的存储结构
双亲表示法
孩子表示法
孩子兄弟表示法
三种表示法的有优缺点
树和二叉树
数和二叉树的转换
左指针指向孩子结点,右指针指向兄弟结点
二叉树向数的转变为逆过程
森林转换为二叉树
把森林中的所有树转换为二叉树,然后每颗二叉树的根作为上一颗二叉树的右子树
二叉树返回森林为逆过程
树和森林的遍历
树的遍历
先根遍历 后根遍历 层次遍历
森林的遍历
真题
2015:
先序序列为abcd的不同二叉树的个数是
根据二叉树前序序列和中序序列的递归算法中递归工作栈的状态变化得出,前序序列和中序序列的关系相当于以前序序列为入栈次序以中序序列为出栈次序,因为前序序列和中序序列可以唯一的确定一颗二叉树,所以题意相当于是abcd入栈,则出栈序列为多少个,对于n个不同元素进栈,出栈序列的个数为Cn2n/n+1个 14个
2011:
若先序遍历和后序遍历刚好相反,这个二叉树一定是一个高度为n的二叉树(一条线,没有分支),所以他的根节点一定是在最后一个或者第一个,同样先序序列的第二个结点一定是在,除去根节点之后剩下的二叉树中,第一个或者最后一个,比如先序序列是1234,后序序列是4321,那么中序序列中1一定是第一个或者最后一个,除去第一个结点之后,先序序列的第二个结点2,在中序序列中一定是在剩下的结点234中,排在第一个或者最后一个。