【数据结构】树与二叉树(一):树(森林)的基本概念:父亲、儿子、兄弟、后裔、祖先、度、叶子结点、分支结点、结点的层数、路径、路径长度、结点的深度、树的深度 |
您所在的位置:网站首页 › 什么叫做嵌套定义的概念和特征 › 【数据结构】树与二叉树(一):树(森林)的基本概念:父亲、儿子、兄弟、后裔、祖先、度、叶子结点、分支结点、结点的层数、路径、路径长度、结点的深度、树的深度 |
文章目录
5.1 树的基本概念5.1.1 树的定义树有序树、无序树
5.1.2 森林的定义5.1.3 树的术语1. 父亲(parent)、儿子(child)、兄弟(sibling)、后裔(descendant)、祖先(ancestor)2. 度(degree)、叶子节点(leaf node)、分支节点(internal node)3. 结点的层数4. 路径、路径长度、结点的深度、树的深度
5.1.4 树的表示1.树形表示法2.嵌套集合表示法3.嵌套括号表示法4.凹入表示法
5.1 树的基本概念
5.1.1 树的定义
树
一棵树是结点的有限集合T:
若T非空,则:
有一个特别标出的结点,称作该树的根,记为root(T);其余结点分成若干个不相交的非空集合T1, T2, …, Tm (m>0),其中T1, T2, …, Tm又都是树,称作root(T)的子树。
![]() 如果子树T1, T2, …, Tm 的相对次序被指明,则称该树为有序树,否则称为无序树。 在有序树中,把Ti (1≤i≤m)称作根的第 i 个子树。因为计算机表示定义了树的一种隐含次序,所以大多数情况下假定所讨论的树都是有序的,除非另有说明。 如果是有序树,那么两者是不同的;如果是无序树,那么两者是相同的。![]() 一个森林是0棵或多棵不相交(非空)树的集合,通常是一个有序的集合。换句话说,森林由多个树组成,这些树之间没有交集,且可以按照一定的次序排列。在森林中,每棵树都是独立的,具有根节点和子树,树与树之间没有直接的连接关系。 森林是树的扩展概念,它是由多个树组成的集合。在计算机科学中,森林也被广泛应用于数据结构和算法设计中,特别是在图论和网络分析等领域。 5.1.3 树的术语 1. 父亲(parent)、儿子(child)、兄弟(sibling)、后裔(descendant)、祖先(ancestor)这些术语用于描述节点之间的关系和层次结构: 每个节点都是它的子树的根节点的父亲。反过来,每个节点都是它父亲的儿子。具有相同父亲的节点称为兄弟。每个节点都是它子树中所有节点的祖先。反过来,每个节点都是它祖先的后裔。节点之间的父子关系和兄弟关系可以帮助我们理解树的结构和遍历算法。 祖先和后裔的概念则用于描述节点之间的历史关系和衍生关系。 2. 度(degree)、叶子节点(leaf node)、分支节点(internal node)在图5.1中,节点B有一个子树,其度为1;节点A有三个子树,其度为3;因此,这棵树的度为3,可以称为3元树(3-ary tree)。叶子节点是度为0的节点,例如在图5.1中,节点F、G、H和I是叶子节点,而节点A、B、C、D和E是分支节点。 3. 结点的层数 结点的层数是根据递归定义来确定的: 根节点的层数为0。其余节点的层数是其父节点的层数加1。 根节点位于第0层,它的子节点位于第1层,子节点的子节点位于第2层,依此类推。![]()
树形表示法是一种图形化的表示方法,使用节点和边来表示树的结构。每个节点代表树中的一个元素,而边表示节点之间的关系。这种表示方法可以直观地展示树的层次结构和节点之间的连接关系。 python创建树: class TreeNode: def __init__(self, value): self.value = value self.children = [] # 创建一个树 root = TreeNode('A') node1 = TreeNode('B') node2 = TreeNode('C') node3 = TreeNode('D') root.children.append(node1) root.children.append(node2) node2.children.append(node3) 2.嵌套集合表示法 tree = { 'value': 'A', 'children': [ { 'value': 'B', 'children': [] }, { 'value': 'C', 'children': [ { 'value': 'D', 'children': [] } ] } ] } 3.嵌套括号表示法 tree_str = '((A (B C)) D)' 4.凹入表示法 def print_tree(node, level=0): if node is None: return print(' ' * level + str(node.value)) for child in node.children: print_tree(child, level + 1) print_tree(root) |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |