数据结构和算法分析爱抄书读书

数据结构与算法分析 —— C 语言描述:树的基础知识

2022-03-23  本文已影响0人  Sun东辉

树(tree)可以用几种方式定义。定义树的一种自然的方式是递归方法。一棵树是一些节点的集合。这个集合可以是空集;若非空,则一棵树由称作根(root)的节点 r 以及 0 个或多个非空的(子)树 T_1,T_2,...,T_k组成,这些子树中每一棵的根都被来自根 r 的一条有向的边(edge)所连接。

每一棵子树的根叫做根 r 的儿子(child),而 r 是每一棵子树的根的父亲(parent)。

从递归定义中我们发现,一颗树是 N 个节点和 N-1 条边的结合,其中的一个节点叫作根。存在 N-1 条边的结论是由下面的事实得出的,每条边都将某个点连接到它的父亲,而除去根节点外每一个节点都有一个父亲。

没有儿子的节点称为树叶(leaf);具有相同父亲的节点为兄弟(sibling);用类似的方法可以定义祖父(grandparent)和孙子(grandchild)关系。

从节点 n_1n_k的路径(path)定义为节点 n_1,n_2,...,n_k的一个序列,使得对于 1 ≤ i < k,节点 n_in_{i+1} 的父亲。这个路径的长(length)为该路径上边的条数,即 k-1.从每一个节点到它自己有一条长为 0 的路径。注意,在一棵树中从根到每个节点恰好存在一条路径。

对任意节点 n_1, n_i 的深度(depth)为从根到 n_i 的唯一路径的长。因此,根的深度为 0。n_i 的高(height)是从 n_i 到一片树叶的最长路径的长。因此所有的树叶的高都是 0。一棵树的高等于它的根的高。一棵树的深度等于它的最深的树叶的深度;该深度总是等于这棵树的高。

如果存在从 n_1n_2 的一条路径,那么 n_1n_2 的一位祖先(ancestor)而 n_2n_1的一个后裔(descendant)。如果 n_1n_2,那么 n_1n_2 的一位真祖先(proper ancestor)而 n_2n_1 的一个真后裔(proper descendant)。

上一篇下一篇

猜你喜欢

热点阅读