一、概念
1.线性结构:描述对象一对一的关系(表)
2.非线性结构:描述数据一对多(树)、多对多(图)
二、树形结构
1.节点:组成树形结构的一个小的单元称为节点
1.1根节点:只有后继,没有前驱
1.2分支节点:既有前驱,又有后继。
1.3叶子节点:只有前驱,没有后继
2.前驱(祖先):由那个节点可以访问到该节点
3.后继(子孙):该节点可以后续访问到哪些节点
4.层:根节点层数为1,后续每引申出的一个节点就在该节点层数上+1
5.树的层数:最高的层数
6.高度:该节点到最远的叶子节点的距离
7.深度:该节点到根节点的距离
8.树的深度=树的高度=树的层数
9.度:后继节点的个数(二叉树)
三、二叉树
1.树形结构中所有节点度数最大为2,称为二叉树
2.二叉树节点类型:叶子节点、只有左孩子、只有孩子、左右孩子都有
(一)满二叉树和完全二叉树
1.满二叉树:所有叶子节点均在同一层,且每层节点个数均为最大值
1.1满二叉树K层节点有:2^(k-1)
1.2满二叉树K层节点有:2^k-1
2.完全二叉树:二叉树的编号(如果节点编号为n,左孩子编号2n,右孩子编号为2n+1),展开后是连续的
(二)完全二叉树的遍历
1.深度优先遍历(DFS)
1.1前序遍历(先序遍历):根左右(1、2、4、8、9、5、10、11、3、6、12、7)
1.2中序遍历:左根右(8、4、9、2、10、5、11、1、12、6、3、7)
1.3后序遍历:左右跟(8、9、4、10、11、5、2、12、6、7、3、1)
2.广度优先遍历(BFS):层序遍历(1、2、3、4、5、6、7、8、9、10、11、12)
(三)实现遍历
1.节点定义
2.创建
3.深度遍历
4.广度遍历(利用队列实现)
5.获得数的高度、深度、层数
6.创建非完全二叉树(需要通过终端输入实现)
7.非递归实现(利用栈实现)
非递归后续因为左后打印根节点,所有根节点需要两次入栈
第一次入栈:为了出栈找到该节点的右孩子,找到后继续入栈
第二次入栈:为了打印该节点