链表和数组比,优点是:新的元素可以被快速插入,旧的元素可以被快速移除,缺点是:想寻找某个值,必须遍历所有的项目;
而二叉树有利于快捷存取链接的元素,具有链表的灵活性,也具有已排序数组的优点,可以用二元搜索方法快速地找到所要的数据;
二叉树包含许多节点,每个节点都存储数据,它的结构特性如下:
1,每个节点最多有两个直接的子节点;
2,有一个没有父节点的节点,称为根,其它所有的节点都有一个父节点;
3,二叉树的节点放置规则是节点的值大于或者等于左分支的值,小于右分支的值;
二叉树的一个重要属性是它的高度,高度是从根到叶的最长路径的长度,路径是由相连节点所形成的链表。路径的长度就是路径中节点数目减去1。
构造二叉树时,先要定义一个节点的结构类型,如:
typedef struct Node {
struct Node *left,//指向左边的节点
*right;//指向右边的节点
size_t size;//数据的空间大小
char data[];//数据本身
}Node_t;
另外提供两个辅助函数,一个用来得到对应于数据的键值,第二个用来比较两个键值
然后定义一个结构类型,用来代表一个树,此结构有三个成员:指向树根的指针;
指向计算键值的指针;
指向比较函数的指针;
然后使用相关的一些函数,用于遍历,插入,寻找,删除节点。