2012-08-26 2 views
1

treenode 레벨이 오름차순으로 증가합니다. 트리의 레벨을 뒤집을 수 있도록 함수를 작성하고 싶습니다. 트리의 깊이를 얻어서 계산해야합니다.treenodes의 역 레벨

이 순서 를 내림차순으로 트리 수준을 초래할 수 있도록

depth-selectednodeLevel

나는 노드의 마지막 자식을 줄 것이다 트리의 깊이, 재산 LastNode을 얻는 방법을 몰랐 내가 사용 coudn't 왜냐하면 그것은 그 레벨에 대한 lastNode를 리턴 할 것이기 때문입니다.

내가

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

답변

0

당신이 문제는 트리의 깊이를 찾아 내고 해결하기 위해 필요한 모든 것 같다 만들고 싶어

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

을 다음과 같이 예를 들어 보통의 TreeNode 수준이므로, 그렇게하기 위해서는 간단한 재귀를 사용할 수 있습니다.

사이비 코드 :

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

사용법 :

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

그리고 C#에서

, 당신은 노드 대표하는 TreeNode를 클래스를 사용하여 가정

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