我怎么得到树的“深度”?

17日视图(30天)
斯塔凡Sevon
斯塔凡Sevon 2015年5月7日
评论道: 伊戈尔 2017年7月12日
你好,
我要找的节点最远的从树的“顶级”,特别是:到最远节点的距离是多远?(我在另一个地方继续使用树,哪里有限制多少树可以有水平,而不是有多少分歧——据我所知,你可以限制在构建树)
在下面的树中,距离将是7,这是最高的点之间的一些步骤,另一方面的1和1图中最低。
任何一个知道一个优雅的解决方案吗?树对象有很多信息,但我不知道如何使用这一目标。
bw,斯塔

接受的答案

Ilya
Ilya 2015年5月8日
这应该工作:
函数深度= treedepth(树)
父母= tree.Parent;
深度= 0;
节点=父(结束);
节点~ = 0
深度=深度+ 1;
=父节点(节点);
结束
结束
1评论
斯塔凡Sevon
斯塔凡Sevon 2015年5月8日
太棒了! ! ! !
它的工作原理就像我们——因为某些原因说在我的国家,像一个在火车上厕所。
,令人惊讶的是意味着它像一个魅力
很多很多的感谢你们的帮助,特别是Ilya,斯塔

登录置评。

更多的答案(2)

杰夫•海斯
杰夫•海斯 2015年5月7日
斯塔——代表你的树吗?作为一个矩阵或某种节点与其他节点列表吗?我怀疑你想创造某种递归函数计算每个节点的深度(或父树的子树)。例如,如果 是顶级树/节点,那么你可以做些什么呢
maxDepth = getDepth(树)
在哪里
函数(深度)= getDepth(树)
maxDepth = 0;
每个childNode树做的
depthChild = 1 + getDepth (childNode);
如果depthChild > maxDepth
maxDepth = depthChild;
结束
结束
注意我们递归检查每个子节点的深度主要的树,把每一个就像树本身。我们只能停止递归,当我们到达一个节点没有任何的孩子。

斯塔凡Sevon
斯塔凡Sevon 2015年5月8日
你好,
谢谢你的回答!
生成的树fitctree函数被描述为一个节点列表。所以,两个主要描述变量t。儿童和t。父母这部分“重叠”信息(下图所示的变量)。
您提出的方法似乎很好,但我不明白如何使具体化,以适应我的信息。任何额外的帮助/指针在正确的方向上,任何人都可以给,我将非常感谢
bw,斯塔
< <
< <
> >
> >
1评论
伊戈尔
伊戈尔 2017年7月12日
我刚刚检查这一点蛮力。我可以确认它的工作原理。它看起来像树节点存储在“t。父”“按深度排序”的方式。因此只有检查最后一个就足够了。
函数max_depth = treedepth(树)
父母= tree.Parent;
max_depth = 0;
depthA =南([1元素个数(父)]);
start_node_ind = 1:元素个数(父)
节点=父(start_node_ind);
深度= 0;
节点~ = 0
深度=深度+ 1;
=父节点(节点);
结束
depthA (start_node_ind) =深度;
结束
max_depth = max (depthA);
%看起来父母列表存储在一个方式,深度排序
断言(issorted (depthA));
%因此,最后一个“父”永远是最深的
断言(max (depthA) = = depthA(结束));
结束

登录置评。

s manbetx 845

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的