树数据结构的应用
为什么是树?
与线性数据结构的数组和链表不同,树是分层(或非线性)数据结构。
- 使用树的一个原因可能是因为您想要存储自然形成层次结构的信息。例如计算机上的文件系统:
文件系统
—————
/ <-- root
/ \
... home
/ \
ugrad course
/ / | \
... cs101 cs112 cs113
- 如果我们以树的形式组织键(具有某种排序,例如 BST),我们可以在适当的时间内搜索给定的键(比链表快,比数组慢)。像 AVL 和红黑树这样的自平衡搜索树保证了 O(Logn) 的搜索上限。
- 我们可以在适当的时间内插入/删除键(比数组快,比无序链表慢)。像 AVL 和红黑树这样的自平衡搜索树保证了插入/删除的 O(Logn) 上限。
- 与链接列表和数组不同,树的指针实现对节点数量没有上限,因为节点使用指针链接。
其他应用:
- 存储分层数据,如文件夹结构、组织结构、XML/HTML 数据。
- 二叉搜索树是一种允许对已排序数据进行快速搜索、插入、删除的树。它还允许找到最近的项目
- 堆是一种使用数组实现的树数据结构,用于实现优先级队列。
- B-Tree 和 B+ Tree :它们用于在数据库中实现索引。
- 语法树:编译器设计中的扫描、解析、代码生成和算术表达式评估。
- KD树:一种空间划分树,用于组织K维空间中的点。
- Trie :用于实现带有前缀查找的字典。
- 后缀树:用于在固定文本中进行快速模式搜索。
- 生成树和最短路径树分别用于计算机网络中的路由器和网桥
- 作为合成数字图像以获得视觉效果的工作流程。
- 决策树。
- 大型组织的组织结构图。
参考:
http://www.cs.bu.edu/teaching/c/tree/binary/
http://en.wikipedia.org/wiki/Tree_%28data_structure%29#Common_uses