树(c++)

树的逻辑结构就是树形结构 ,之前学习的线性结构都是⼀对⼀的形式,⽽树形结构是⼀对多的形式 ,我们拿系统的⽬录结构来举例

树(c++)_第1张图片
我的电脑对于C盘D盘就是⼀对多的关系,C盘和它下⾯连接的⽂件夹也是⼀对多的关系,同理打开某个⽂件夹的时候,⾥⾯可能有特别多的⽂件,所以这个⽂件夹和⾥⾯若⼲个⽂件也是⼀个⼀对多的关 系, D盘同理。 这就是⼀个树形结构,把它抽象成⼀个个的结点就⻓成右边这样的形式。 ⼀个点对应若 ⼲个点,也是⼀对多的形式,类似于我们⽣活中的树,但是我们要倒着看这棵树,就是从根部位置逐渐向外延伸
 

我们来认识⼀些相关术语

最顶上的结点我们称之为根结点(橙⾊部分)
最下⾯没有任何分⽀的结点,我们称之为叶⼦结点(绿⾊部分)
除了根结点和叶⼦结点,剩下有分⽀的结点称之为分⽀结点(蓝⾊部分)
连接结点与结点的这条线称它为边,所以树形结构是由结点和边组成的
                            树(c++)_第2张图片
如果从上往下看,每个结点可能有0 或多个后继
⽐如A节点有3个后继,B结点有两个后继,E结点只有⼀个后继,J这个节点只有0个后继
从下往上看,除了根结点,每个结点都有⼀个前驱
⽐如J结点有个前驱E,E结点有个前驱B,我们就可以得出⼀个性质: 结点个数= 边数+1,从下往上看每⼀个不是根结点的结点,它都有⼀个向上的前驱,它就得有⼀条边,所以根结点以下的结点数是和它的边数是⼀样的,因为下⾯的部分全都是⾮根结点,都有⼀个向上的边,⽽根结点没有向上的边,所以结点总数等于边数+1,这个性质作为了解就⾏, 平常不会考到
 

回顾完树形结构再来看下树的标准定义

树是n(n ≥ 0)个结点的有限集,当n=0时,称为空树(树中没有任何结点),在任意⼀棵树⾮空树中应满⾜:
  1. 有且仅有⼀个特定的称为根(root)的结点(下图A);
  2. 当n>1时,其余结点可分为m(m > 0)个互不相交的有限集T1, T2, ..,Tm,其中每⼀个集合本身⼜是⼀棵树,并且称为根的⼦树(如下图 BEFG可以看成是⼀棵树,C可以看成是⼀棵树,DGHIK可以看成是⼀棵树)
           树(c++)_第3张图片
  • 树是⽤递归定义的结构,往后关于树的很多问题也都是⽤ 递归解决的

 

树的相关术语(补充)

⽗结点:直接前驱,根结点没有⽗结点(J的⽗结点为E)
孩⼦结点:直接后继,叶⼦节点没有孩⼦结点(A的孩⼦结点是BCD,B的孩⼦结点是EF,F没有孩⼦结点)
结点的度:孩⼦的数量(A的度=3,B的度=2,E的度=1,J的度=0)
树的度:所有结点中度的最⼤值(AD结点的度均为3)
书的⾼度(深度):⼀共有多少层(4)
两个结点之间的路径:两个结点之间的最短路径(FG的最短路径是FBADG)
路径⻓度:两点的路径中,边的个数(G到I的路径⻓度是2)
                         树(c++)_第4张图片

 

 

 

你可能感兴趣的:(算法,数据结构,c++)