树结构java_树结构与Java实现

17d83d0983ae40a1213382f4b0db6b2e.png

目录

前言

提到『树』这种数据结构,相信很多人首先想到的就是『二叉树』。

的确,二叉树作为一种重要的数据结构,它结合了数组和链表的优点,有很多重要的应用。

我们都知道,数组的特点是查询迅速,根据index可以快速定位到一个元素。但是,如果要插入一个元素,就需要将这个元素位置之后的所有元素后移。平均来讲,一个长度为N的有序数组,插入元素要移动的元素个数为N/2。有序数组的插入的时间复杂度为O(N),删除操作的时间复杂度也为O(N)。

对于插入和删除操作频繁的数据,不建议采用有序数组。

链表的插入和删除效率都很高,只要改变一些值的引用就行了,时间复杂度为O(1)。但是链表的查询效率很低,每次都要从头开始找,依次访问链表的每个数据项。平均来说,要从一个有N个元素的链表查询一个元素,要遍历N/2个元素,时间复杂度为O(N)

对于查找频繁的数据,不建议使用链表。

本节先不介绍二叉树,而是先讲一下树这种数据结构。相信有了本节的知识作为基础,再了解二叉树就会轻松很多。

树的概念

1d7350f67c00bdead5bed9b6e4f36356.png

概述

在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。

它是由n(n>0)个有限节点组成一个具有层次关系的集合。

把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

它具有以下的特点:

每个节点都只有有限个子节点或无子节点; 没有父节点的节点称为根节点; 每一个非根节点有且只有一个父节点; 除了根节点外,每个子节点可以分为多个不相交的子树; 树里面没有环路(cycle) —— 维基百科

根据树的定义,下面的结构就不是『树』:

e6131a41cdb41b0b6a94793f7d40c63e.png

术语

c4e01606f20f35eed41eb71110d23e43.png

路径

从某个节点依次到达另外一个节点所经过的所有节点,就是这两个节点之间的路径。

树顶端的节点被称为根。从根出发到达任意一个节点只有一条路径。

父节点

除了根节点之外,每个节点都可以向上找到一个唯一的节点,这个节点就是当前节点的父节点。相应的,父节点下方的就是子节点。

叶子节点

没有子节点的“光杆司令”就被称为叶子节点。

子树

每个子节点作为根节点的树都是一个子树。

一个树结构的代数就是这个树的层。

一棵树中,最大的节点的度称为树的度。

兄弟节点

具有相同父节点的节点互称为兄弟节点;

实际应用

树结构有非常广泛的应用,比如我们常用的文件目录系统,就是一个树结构。

例如在Windows10操作系统的CMD命令行输入tree命令,就可以输出目录树:

tree

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值