树!参天大树!!!【C++数据结构】

今天我们来讲一讲数据结构之树!!!

别问我为什么不讲noi

OK,开始今天的讲解吧!!

树,是一种非线性的数据结构,用他可以很好的表达各个数据之间的层叠关系。树在生活中也有很多示例,例如现在所说的:

百度网盘支持IPv6的网络了!!

IPvn其实是一种网络地址的存储方式。像IPv4就是指地址有4位,像1,1,1,1就是一个Ipv4的完整地址。而n越多可存储的用户量就越多。而寻址就是寻找虚拟地址所在的现实地址并发送至现实地址中的手机。(例如实时聊天工具微信)而寻址的方式正好是一个先序遍历树的寻找方式。

树的定义

一棵树是由n(n>0)个元素组成的有限集合,其中:
(1)每个元素称之为node|节点
(2)有一个特定的节点,称为根节点,树根(root)
(3)除根节点为其余节点能分成m(m>=0)个互不相交的有限集合,T0,T1,......,Tm1T_0,T_1,......,T_{m-1}
其中每一个节点子集都是一棵树!!!例如树根的孩子就是一棵树。

基本概念

(1)树是递归定义的(不用说了吧)
(2)一棵树中至少有一个节点。如果只有一个节点,就是根节点。
树!参天大树!!!【C++数据结构】
上图即为一个只有一个节点的树。
(3)一个节点的子树(即这棵树下面还有多少棵最顶层的树)称之为这个节点的度(degree,例如上图的点1即为度为0的节点。度为0的节点称之为叶节点(leaf,上图1节点)度不为零的称之为分支节点,根以外的分支节点又称为内部节点,树中各节点的度的最大值就是这棵树的度)
是不是晕了?看图:
树!参天大树!!!【C++数据结构】你品,仔细品,再品,多看看,才能学好。(虽然我有点看不懂
(4)在用图形表示的树中,对两个用线段(树枝)链接起来的相关联的节点,上端节点是下端节点的爸爸,下端节点是上端节点的儿子!例如,上图1是2和3的父亲,2和3是1的儿子(为什么都是男的啊)如果在父亲之上,就称为祖先,例如1是6的祖先,6是1的孙子!

怎么感觉在骂人?

(5)定义一棵树根节点的层次(level)为0,其他节点的层次等于他父节点层次加一。这很好理解,1在level1,2和3在level2,这完全不是一个层次的啊!

又来了

(6)树种任意两个节点只要他们之间有通路,就称为他们之间存在一条路径。路径距离为路上的节点个数减一。例如从2到3,经过2,1,3,-1即为2距离。

(7)森林(forest)指m(>=0)棵互不相交的树的集合。

神奇!竟然有空荡荡的森林,那还叫森林吗??????(没有一棵树,即m==0)


好了树的基础知识学完,下次将会学习树的存储结构等实用方法,欢迎关注期待留言


小小庆祝下突破1200阅读量…