上一个博客已经解释过了什么是线性和非线性的区别。想要系统的了解,需要参照之前的博文。
树是一种非常重要的非线性结构!
为什么称为树结构呢?主要是长得有点像,树形结构讲究层级和分叉,和自然界的树比较相近。

树简介

以下的树是无序,单纯按存放方式。

理解树:

树形图 jQuery 树形图片_算法

这是一个简单的树形结构图,其中在理论范畴来讲,节点三到五称为业主节点。作为技术人员,我得找一个与我们比较近的例子!

文件系统(其实不是树,但是可以更好的理解树的传承关系):

树形图 jQuery 树形图片_二叉树_02


每一个文件夹都可以作为一个节点。

树类型

二叉树

二叉树,就是开两个叉的,指向两个方向。二叉树是树分支里面非常重要的结构。为何二叉树重要,个人觉得得从二进制的思维说起。数学中的大于小于和0,1状态是相近的,因此在数据判断上大于小于判断是有优势的。在数据排序中一般是大于小于状态(等于就是自身,去除重复后就没有了),二叉树也是这种排列方式,所以从硬件逻辑判别方面来说,二叉树是有较大优势的。

术语:方向分为左,右方向
节点:根节点,叶子节点(终端节点)
度:一个根节点的孩子数

树形图 jQuery 树形图片_二叉树_03

树存储-顺序存储和链式存储:

由于这两种存储方式的不同,顺序存储需要在存储前排序好,链式存储则靠指针域指向反应逻辑规律。

树遍历

树的遍历一般遵循以下三种方式:
前序:左-根-右
中续:根-左-右
后续:左-右-根

树应用

最优二叉树-哈夫曼树
最优:权带路径最小(WPL)
哈夫曼编码:还有很多。