1

在树节点中,级别将按升序增加我想编写一个函数,以便它反转树的级别我知道我应该得到树的深度,然后计算

depth-selectednodeLevel

所以它会导致树的级别按降序排列我不知道如何获得树的深度,该属性LastNode将给出节点的最后一个子节点,我不能将它用于深度,因为它会返回 lastNode只是为了那个级别而不是较低的级别。

例如通常的树节点级别如下

|0|
 |
|1|
 |
|2|
 |
|3|

我想成功

 |3|
  |
 |2|
  |
 |1|
  |
 |0|
4

1 回答 1

0

似乎您需要解决的问题就是找到树的深度,因此您可以使用简单的递归。

伪代码:

int GetDepth(Node node)
{
    return node.HasChilds ? node.Childs.Max(GetDepth) : node.Level;
}

而在 C# 中,假设您使用 TreeNode 类来表示节点:

public int GetDepth(TreeNode node)
{
    return node.Nodes.Count == 0
        ? node.Level
        : node.Nodes.Cast<TreeNode>().Select(this.GetDepth).Max();
}

用法:

var depth = GetDepth(myTree.Root);

如果你没有每个节点的 Level 属性,你可以像这样添加一个参数:

public int GetDepth(TreeNode node, int depth)
{
    return node.Nodes.Count == 0
        ? depth
        : node.Nodes.Cast<TreeNode>()
              .Select(x => this.GetDepth(x, depth + 1)).Max();
}

用法:

var depth = GetDepth(myTree.Root, 0);
于 2012-08-26T04:48:28.130 回答