来源:互联网 发布:冰淇淋挖球器 知乎 编辑:程序博客网 时间:2024/05/17 07:53

一:树的定义

树可以用几种方式定义。定义树的一种自然方式是递归的方法。一颗树是一些节点的集合,这个集合可以是空集,若非空,则一颗树由称作根的节点R以及0个或多个非空的树T1,T2...Tk组成,这些子树中没一颗的根都被来自根R的一条有向的边所连接。




树其实就是由N个节点和N-1条边组成,边在编程中大部分情况下由指针来描述。

实现树的一种方法可以是在每一个节点除数据外还要有一些指针,使得该节点的每一个儿子都有一个指针指向它,而每个节点的儿子是不确定的,这样会产生太多浪费空间。实际采用的方法是:将每个节点的所有儿子都放在树节点的链表中。让前一个兄弟指向下一个兄弟,这样便能找到所有的儿子。

Typedef struct TreeNode *ptrToNode;Struct TreeNode{ElementType Element;ptrToNode firstChild;ptrToNode nextSibling;};


二:树的应用

1.树流行的用法之一是包括UNIX,VAX/VMSDOS在内的操作系统中的目录结构。

2.很多东西本身的结构就是树形的,如xmlhtml等,那么编写这些东西的解析器的时候,不可避免用到树。

3.树有个好处,就是当节点有序的时候(即有序树),那么在这个树上搜索一个节点是很快的(log级别),所以,现在的索引一般都是用各种树(数据库如mysql大多用B+树)。

4.在处理语法解析的时候,树也是不可或缺的数据结构,各种语言解析之后都是得到语法树,再做后续处理。等等。

 

三:树的类型

有二叉查找树,AVL树,红黑树,B-树,B+树,后缀树,广义后缀树,trie树。


0 0
原创粉丝点击