2012-08-26 5 views
1

Dans un treenode les niveaux seront augmentés dans l'ordre croissant Je veux écrire une fonction de sorte qu'il va inverser le niveau d'un arbre Je sais que je devrais obtenir la profondeur de l'arbre et ensuiteniveaux inverses de todesodes

depth-selectednodeLevel

afin qu'il entraînera les niveaux d'arbres dans l'ordre décroissant Je ne savais pas comment obtenir la profondeur de l'arbre, la propriété LastNode donnera le dernier enfant du nœud et je coudn't utilisation c'est pour la profondeur car il retournera le dernier noeud de juste pour ce niveau pas les inférieurs.

par exemple un niveau habituel de TreeNodes sont les suivantes

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

Je veux faire

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

Répondre

0

On dirait que tout ce que vous devez résoudre le problème est de trouver la profondeur de l'arbre, de sorte Pour ce faire, vous pouvez utiliser la récursivité simple.

Psuedo-code:

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

Et en C#, en supposant utilisez la classe TreeNode pour représenter les nœuds:

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

Utilisation:

var depth = GetDepth(myTree.Root); 

Et si vous n » t avoir la propriété Level de chaque noeud, vous pouvez simplement ajouter un paramètre comme ça:

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(); 
} 

Utilisation:

var depth = GetDepth(myTree.Root, 0);