树
1.概念
- 树结构是一种描述非线性层次关系的数据结构
- 在一个树结构中,有且仅有一个结点没有直接前驱,这个结点就是树的结点。
- 除根结点外,其余每个结点有且仅有一个直接前驱。
- 每个结点可以有任意多个直接后继。
2.树的术语
- 根:有且仅有一个无直接前驱结点的结点
- 结点的度:结点拥有的子树的数量叫做结点的度
- 树的度:树内结点的度的最大值
- 叶子:终端结点
- 结点的层:从根算起。根为第一层,往下则+1层
- 树的深度:树的最大层数
- 森林:去掉根结点所得子数的个数
3.二叉树
什么是二叉树
结点最多只有两个儿子,叫做二叉树
二叉树的重要性质
- 第i层上最多有2^(i-1)个结点
- 深度为k的的二叉树最多有2^k - 1个结点
- N0表示叶结点个数,N2表示度为2的非叶结点个数,那么N0=N2+1
二叉数的存储
- 顺序存储:一般通过结构数组进行存储
- 链式存储:存储结构包含结点元素及分别指向左子树和右子树的引用
//链式存储
typedef struct treeNode
{
void* NodeData; // 元素数据
struct treeNode* LtreeNode; //左子树结点引用
struct treeNode* RtreeNode; // 右子树结点引用
}TreeNode_T;
二叉树的遍历
- 先序遍历:1.访问根结点 2.访问左子树 3.访问右子树
- 中序遍历:1.访问左子树 2.访问根结点 3.访问右子树
- 后序遍历:1.访问左子树 2.访问右子树 3.访问根结点
- 层次遍历:从根结点开始,向下一层一层访问&