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