1

ツリーノードでは、レベルは昇順で増加します ツリーのレベルを逆にする関数を書きたい ツリーの深さを取得してから計算する必要があることを知っています

depth-selectednodeLevel

ツリーレベルが降順になるように、ツリーの深さを取得する方法がわかりませんでした。プロパティ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 に答える