2012-08-26 21 views
1

在treenode级别将按升序递增我要编写一个函数,以便它能够反转树的级别,我知道我应该得到树的深度,然后计算出treenodes的反向级别

depth-selectednodeLevel

,这样会造成降序 树平,我不知道如何让树的深度,物业LastNode会给节点的最后一个孩子,我coudn't使用它的深度,因为它会返回只为该级别的lastNode而不是较低级别。

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

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

我想让它

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

回答

0

好像所有你需要解决的问题是找到树的深度,所以要做到这一点,你可以使用简单的递归。

伪代码:

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

而在C#中,假设你使用的树节点类来表示节点:

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