树的概念及相关概念
树是非线性的数据结构,是由n个有限集合组成的具有层次关系的集合,它的每个结点有0个或多个子节点,没有父节点的结点成为根结点,每一格非根节点有且仅有一个双亲节点。
相关概念:
- 结点的度:一个结点含有的子树个数
- 叶节点:度为0的结点等
树的存储方式
树有很多种表示方法,最常用的是孩子兄弟表示法,例如:
typedef int DataType;
struct Node
{
struct Node* firstChild;//第一个孩子结点
struct Node* nextBrother;//指向下一个兄弟节点
DataType data;
};
二叉树的基本概念以及性质
- 特点:每个结点最多有2棵子树,即二叉树不存在度大于2的结点;二叉树的子树有左右之分,子树的次序不能颠倒
- 性质:
1、根结点层数为1,一棵非空二叉树的第i层最多有2 ^(i-1)(i>0)个结点
2、 只有根结点 的二叉树的深度为1,则深度为k的二叉树的最大节点数为2^k-1
3、 对任意一棵二叉树,若琪叶节点的个数为n0,度为2的非叶结点个数为n2,则n0=n2+1
4、 具有n个结点的完全二叉树的深度为k位log2(n+1)上取整
满二叉树和完全二叉树
满二叉树指一棵二叉树每一层的结点数都达到最大值,即如果一棵二叉树的层数为k,且结点总数为(2^k)-1,它就是满二叉树
完全二叉树指层序遍历,只要遇到结点为空,后面再没有节点,就是完全二叉树,满二叉树是一种特殊的完全二叉树
二叉树的顺序存储与链式存储
二叉树顺序存储使用数组来存储,只适合完全二叉树,现实中使用堆猜使用数组存储
链式存储有两种:二叉链表和三叉链表,一般使用二叉链表。
二叉树的链式存储及相关操作
https://blog.csdn.net/qq_41809901/article/details/96025569
二叉树面试题
见博客:
https://blog.csdn.net/qq_41809901/article/details/96296562