一、基本概念
1、什么是树、二叉树、左右子树、(根或叶子)节点就不必赘述了。
注:图片摘自百度百科
2、节点的度 : 节点有几棵子树该节点的度就为几。二叉树节点的度为{0, 1, 2}
3、节点的深度: 从根到该节点的唯一路径的长。根节点的深度为0
4、节点的高度: 从该节点到叶节点的最长路径(可能有好几条)的长。叶节点的高度为0
5、树的高度 : 树的高度就是根节点的高度。
二、特殊的二叉树
1、满二叉树 :除了叶节点外所有节点都有左右子树且叶节点全部落在最下层。
2、完全二叉树:在满二叉树的最下层从左至右添加一些叶节点就构成了完全二叉树。即完全二叉树的叶节点可能落在
最下层和次下层且除了叶节点外所有节点都有左右子树。同时,最下层的叶节点从左至右不能被隔开。
3、平衡二叉树 : 它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树
4、有序二叉树(二叉查找树、二叉搜索树) : 所有节点的大小关系都满足 左子树 < 根节点 < 右子树。
三、二叉树的基本操作
1、树的实现
struct TreeNode;
typedef struct TreeNode* PtrToNode;
typedef PtrToNode Tree;
struct TreeNode {
ElementType element;
Tree left;
Tree right;
};
2、树的遍历:前、中、后序遍历
递归思想的运用,遍历文件目录的伪代码:
static void ListDir(DirectoryOrFile D, int Depth)
{
if (D is a legitimate entry)
{
PrintName(D,Depth);
if (D is a directory)
{
for each child C of D
ListDir(C, Depth-1); // 递归遍历
}
}
}
3、插入
4、删除
5、计算树的节点个数
6、计算树的深度
7、树的合并
四、将要讨论的几种典型树
1、二叉查找树
2、AVL树
3、伸展树
4、红黑树
5、堆(优先队列 )
6、k-d树