树形:一对多
反映的是一种层次结构
eg:祖宗
爷爷
叔叔 爸爸 伯伯
你
班级组织结构,企业组织架构,家谱等都是树这种结构
一、概念
1. 递归式的定义
树是n(n≥0)个结点的有限集合:
·当n=0时,称为空树;
·当n>0时,满足:
1)有且仅有一个根结点(Root);
2)其余结点可分为m(m≥0)个互不相交的有限集合T1,T2,…,Tm
每个集合本身也是一棵树,称为根的子树(Subtree)
2. 二叉树(Binary Tree)
1)定义
二叉树是n(n≥0)个结点的有限集合:
·或为空树(n=0);
·或由一个根结点和两棵互不相交的子树组成,分别称为左子树和右子树,且二者有严格顺序。
2)特点
1.每个结点最多有两个子树;
2.左、右子树有顺序,不可互换;
3.即使某结点仅有一个子树,也必须明确是左子树还是右子树。
所以我们通常定义成这样的结构体来表示二叉树这种类型:
二、叉树的遍历
深度优先:
前序遍历---根左右
中序遍历---左根右
后续遍历---左右根
广度优先:
层次遍历
1. 前序遍历
前序遍历:ABDGHCEIF
2. 中序遍历
中序遍历:GDHBAEICF
3. 后序遍历
后序遍历:GHDBIEFCA
4. 另:
1. 每个节点都走了对应访问次序
如果是前序,则每个节点都走了一下前序的访问过程
2. 假设:
知道前序 和中序
前序遍历—根左右 //主要知道谁是根
ABDGHCEIF
中序遍历—左根右 //主要知道谁左谁右
GDHBAEICF
4.---------就可以知道这个二叉树的样子
同理:知道中序和后序也能知道二叉树的样子
但只知道前序和后序无法知道二叉树的样子
三、代码实现
1. 定义节点
2. 创建二叉树
3. 前序遍历
4. 中序遍历
5. 后序遍历
6. 广度遍历
广度遍历:按照层次依次输出
需要用到在队列时写的函数(笔记在前面有)