数据结构--树

Posted ynhwl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构--树相关的知识,希望对你有一定的参考价值。

 

概念

树是一种非线性的数据结构,相对于线性的数据结构(链表、数组)而言,树由节点组成,树的平均运行时间更短(往往与树相关的排序时间复杂度都不会高),一般的树是有很多很多个分支的,分支下又有很多很多个分支,如果在程序中研究这个会非常麻烦。因为本来树就是非线性的,而我们计算机的内存是线性存储的,太过复杂的话我们无法设计出来的,因此,我们先来研究简单又经常用的---> 二叉树。

二叉树

二叉树的意思就是说:每个节点不能多于有两个儿子。

树的创建

树由节点组成,因此,我们定义树的时候往往是->定义节点->节点连接起来就成了树,而节点的定义就是:一个数据、两个指针(如果有节点就指向节点、没有节点就指向null)。

上面说了,树是由若干个节点组成,节点连接起来就成了树,而节点由一个数据、两个指针组成

技术分享图片

 

因此,创建树实际上就是创建节点,然后连接节点

树的遍历

我们如果可以像数组一样遍历树(看它的数据),那就说明树创建完成了~

二叉树遍历有三种方式:

先序遍历

先访问根节点,然后访问左节点,最后访问右节点(根->左->右)

中序遍历

先访问左节点,然后访问根节点,最后访问右节点(左->根->右)

后序遍历

先访问左节点,然后访问右节点,最后访问根节点(左->右->根)

遍历二叉树的一个例子:

技术分享图片

以上面的二叉树为例:

如果是先序遍历:10->9->20->15->35

如果是中序遍历:9->10->15->20->35

可能需要解释地方:访问完10节点过后,去找的是20节点,但20下还有子节点,因此先访问的是20的左儿子15节点。由于15节点没有儿子了。所以就返回20节点,访问20节点。最后访问35节点

如果是后序遍历:9->15->35->20->10

可能需要解释地方:先访问9节点,随后应该访问的是20节点,但20下还有子节点,因此先访问的是20的左儿子15节点。由于15节点没有儿子了。所以就去访问35节点,由于35节点也没有儿子了,所以返回20节点,最终返回10节点

一句话总结:先序(根->左->右),中序(左->根->右),后序(左->右->根)。如果访问有孩子的节点,先处理孩子的,随后返回

无论先中后遍历,每个节点的遍历如果访问有孩子的节点,先处理孩子的(逻辑是一样的)

因此我们很容易想到递归。

 

有意思的是:通过先序和中序或者中序和后序我们可以还原出原始的二叉树,但是通过先序和后续是无法还原出原始的二叉树的

也就是说:通过中序和先序或者中序和后序我们就可以确定一颗二叉树了!

 

以上是关于数据结构--树的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法:树 赫夫曼树

数据结构与算法:树 2-3树,2-3-4树,B树 B+树 B*树 (了解)

数据结构 树(下)

数据结构--前缀树(字典树)

数据结构与算法:树 赫夫曼树

数据结构与算法:树 二叉排序树(BST)