这是算法理论中的一个简单问题。
它们之间的区别在于,在一种情况下,您要计算根节点和具体节点之间的最短路径上的节点数,而在其他数量的边上。
哪一个
这是算法理论中的一个简单问题。
它们之间的区别在于,在一种情况下,您要计算根节点和具体节点之间的最短路径上的节点数,而在其他数量的边上。
哪一个
Answers:
我了解到深度和高度是节点的属性:
节点的深度是从节点到树的根节点的边数。
根节点的深度为0。
节点的高度是从节点到叶子的最长路径上的边数。
叶节点的高度为0。
树的属性:
的高度树将是其根节点的高度,
或等价地,其最深节点的深度。
的直径(或宽度树)是数量节点的任意两个叶节点之间的最长路径上。下面的树的直径为6个节点。
一棵树的高度和深度相等...
但是节点的高度和深度不相等,因为...
高度是通过从给定节点遍历到最深的叶子来计算的。
从根到给定节点的遍历计算深度。
根据Cormen等。算法简介(附录B.5.3)中,树T中节点X的深度定义为从T的根节点到X的简单路径的长度(边数)。节点Y的高度为最长的边数从Y到叶子向下简单路径。一棵树的高度定义为其根节点的高度。
请注意,简单路径是没有重复顶点的路径。
一个高度树等于的最大深度树。节点的深度和节点的高度不一定相等。参见第三版Cormen等的图B.6。这些概念的说明。
有时我会遇到一些问题,要求人们计算节点(顶点)而不是边缘,因此请澄清一下,如果您不确定在考试或工作面试中是否应该计算节点或边缘。
简单答案:
深度:
1. 树:从树的根节点到叶节点的边/弧的数量称为树的深度。
2. 节点:从根节点到该节点的边/弧的数量称为该节点的深度。
我想发表这篇文章是因为我是一名本科生CS学生,越来越多的我们使用OpenDSA和其他开放源代码教科书。从评分最高的答案看来,教授高度和深度的方式已经从一代代转换到了另一代,我正在发布此内容,以便每个人都知道这种差异现在存在,并希望不会在任何情况下引起错误程式!谢谢。
如果n 1,n 2,...,n k是树中节点的序列,使得n i是n i +1 的父级,且1 <= i <k,则此序列称为从n开始的路径1至n k。路径的长度是k-1。如果存在从节点R到节点M的路径,则R是M的祖先,而M是R的后代。因此,树中的所有节点都是树的根的后代,而根是祖先所有节点。树中节点M的深度是从树的根部到M的路径的长度。树的高度比树中最深节点的深度大一。深度为d的所有节点在树中的级别为d。根是级别0上的唯一节点,其深度为0。
图7.2.1:二叉树。节点A是根。节点B和C是A的孩子。节点B和D一起形成一个子树。节点B有两个子节点:节点的左子节点是空树,节点的右子节点是D。节点A,C和E是G的祖先。节点D,E和F构成树的第二层。节点A处于级别0。从A到C到E到G的边形成一条长度为3的路径。节点D,G,H和I为叶子。节点A,B,C,E和F是内部节点。I的深度为3。这棵树的高度为4。