数据结构学习——树的基本分类

来源:互联网 发布:哪个导航软件最好用 编辑:程序博客网 时间:2024/06/05 14:40

自学数据结构已经很久了,使用的教材是《数据结构与算法分析——C语言描述》。现在回过头来再看一遍此书,重新梳理一下数据结构的相关知识。

以下是摘自维基百科的一些树的基本分类:

    • 无序树:树中任意节点的子节点之间没有顺序关系,这种树称为无序树,也称为自由树;
    • 有序树:树中任意节点的子节点之间有顺序关系,这种树称为有序树;
      • 二叉树:每个节点最多含有两个子树的树称为二叉树;
        • 完全二叉树:对于一颗二叉树,假设其深度为d(d>1)。除了第d层外,其它各层的节点数目均已达最大值,且第d层所有节点从左向右连续地紧密排列,这样的二叉树被称为完全二叉树;
        • 满二叉树:对于上述的完全二叉树,如果去掉其第d层的所有节点,那么剩下的部分就构成一个满二叉树(此时该满二叉树的深度为d-1);
      • 霍夫曼树:带权路径最短的二叉树称为哈夫曼树或最优二叉树;
      • B树
以下是该书中还涉及到的一些树的基本概念:

表达式树:树叶是操作数,如常量或变量。其他的节点是操作符。

二叉查找树对于树中的每个节点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题学习到的)

关于三种遍历树的方法做一个简单的总结:

先序遍历(前缀表达式):打印顺序:节点、左子树、右子树。(根左右)

中序遍历(中缀表达式):打印顺序:左子树、节点、右子树。(左根右)

后序遍历(后缀表达式):打印顺序:左子树、右子树、节点。(左右根)


例如这样的一棵二叉查找树,其中序遍历的结果就是:10 12 15 18 20 25 30 

先序遍历的结果就是:20 15 10 12 18 25 30

后序遍历的结果就是:12 10 18 15 30 25 20

只要严格按照他们的打印顺序打印出来即可。



0 0