1、树型结构
**1.1概念:**树是一种非线性的数据结构,它有n个(n>=0)有限节点组成一个具有层次关系的集合.
1.2特点:
1、有一个特殊的节点称为根节点,根节点没有前驱。
2、除根节点外,其他节点被分成M(m>0)个互不相交的集合,每个集合都是与树类似的子树。每个节点有且只有一个前驱,可以有0个或者多个后继。
3、树是递归定义的
1.3概念:
节点的度:一个节点含有子树的个数称为节点的度
树的度:一棵树中,最大的节点的度称为树的度
叶子节点或终端节点:度为0的节点称为叶子节点
双亲节点或父节点:若一个节点含有子节点,则这个节点称为子节点的父节点
孩子节点或子节点:一个节点含有的子树的根节点称为这个节点的子节点
跟节点:一棵树中,没有双亲节点的节点称为根节点
节点的层次:从根节点定义起,根为第1层,根的子节点为第2层,以此类推
树的高度或深度:树中节点的最大层次
非终端节点或分支节点:度不为0的节点
兄弟节点:具有相同父节点的节点称为兄弟节点
堂兄弟节点:双亲在同一层的节点称为堂兄弟节点
节点的祖先:从根到该节点所经分支上的所有节点
1.4树的表述形式:
class TreeNode{
int val; // 树中存储的数据
TreeNode firstChild //第一个节点的引用
TreeNode nextBrother //下一个兄弟的引用
**1.5树的应用:**树一般用系统文件管理
2、二叉树
**2.1概念:**一棵二叉树是节点的有限集,该集合 或者为空或者由根节点和两颗
棵别称为左子树和右子树的二叉树组成。
2.2特点:
1、,每个节点最多有两个子节点,即不存在度大于2的节点
2、二叉树的子树有左右之分,即二叉树的左右子树不能颠倒,所以二叉树是有序树
2.3两种特殊的二叉树:
1、满二叉树:如果每个层数的节点都达到最大值,则称这个二叉树为满二叉树。即若一棵二叉树的层数为K,总节点达到2^k-1,则它就是满二叉树。
2、完全二叉树:完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个节点的二叉树,当且仅当每个节点都与深度为K的满二叉树中编号从1到n的节点一一对应称之为完全二叉树。完全二叉树是效率很高的数据结构。
2.4二叉树的性质:
1、若规定根节点的层数为1,则滴 i 层的结点数最多为2^(i-1)个。
2、若规定只有根节点的二叉树深度为1,则深度为K的二叉树最多有2^(k)-1个结点。
3、对于具有n 个结点的二叉树,如果按照从上到下,从左到右的方式从0进行编号。则对于序号为i的结点有:
若 i >0,双亲序号:(i-1)/2;若i=0,i 为根节点的编号,无双亲节点
若 2i+1<n,左孩子序号为2i+1,有孩子序号为2i+2
**2.5二叉树的存储:**二叉树的存储结构为:顺序存储和类似于链表的链式存储
2.6二叉树的操作:
2…6.1 二叉树的遍历:所谓的遍历,就是指沿着某条手镯路线,依次对树中的每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体问题(如打印结点内容、对结点内容进行改变等)
2.6.2遍历的方式:
1、前序遍历(Preorder Traversal 也称为先序遍历)-- 先访问根节点–>根的左子树–>根的右子树
2、中序遍历(Inorder Traversal)- -根的左子树–>根节点–>根的右子树
3、后序遍历(Postorder Traversal)–根的左子树–>根的右子树–>根节点
2.6.2 二叉树的基本操作
求结点个数、求子节点个数、求叶字结点个数、求第K层结点个数、获取二叉树的高度
接下来会在下一篇博客中将这些操作以代码形式实现。