自学数据结构已经很久了,使用的教材是《数据结构与算法分析——C语言描述》。现在回过头来再看一遍此书,重新梳理一下数据结构的相关知识。
以下是摘自维基百科的一些树的基本分类:
以下是该书中还涉及到的一些树的基本概念:
表达式树:树叶是操作数,如常量或变量。其他的节点是操作符。
二叉查找树:对于树中的每个节点X,它的左子树中所有关键字值小于X的关键字值,它的右子树中所有关键字值大于X的关键字值。
AVL树:每个节点的左子树和右子树的高度最多差1的二叉查找树。
伸展树:它保证从空树开始任意连续M次对树的操作最多花费O(M*logN)时间。
B-树(引自百度百科):一棵m阶B树(balanced tree of order m)是一棵平衡的m路搜索树。它或者是空树,或者是满足下列性质的树:
1、根结点至少有两个子女;
2、每个非根节点所包含的关键字个数 j 满足:┌m/2┐ - 1 <= j <= m - 1;
3、除根结点以外的所有结点(不包括叶子结点)的度数正好是关键字总数加1,故内部子树个数 k 满足:┌m/2┐ <= k <= m ;
4、所有的叶子结点都位于同一层。
(知识点:三种树的遍历方式——先序遍历,中序遍历,后序遍历)
备注:┌M/2┐是向上取整,即取与结果最接近的比结果大的整数,┌3/2┐=2;
└M/2┘是向下取整,即取与结果最接近的比结果小的整数,└3/2┘=1.
Trie树:又称单词查找树,字典树。根节点不包含字符,除根节点外每一个节点都只包含一个字符;
从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串; 每个节点的所有子节点包含的字符都不相同。(在刷ACM题学习到的)
关于三种遍历树的方法做一个简单的总结:
先序遍历(前缀表达式):打印顺序:节点、左子树、右子树。
中序遍历(中缀表达式):打印顺序:左子树、节点、右子树。
后序遍历(后缀表达式):打印顺序:左子树、右子树、节点。