2012-08-26 19 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);