나는

2017-02-24 15 views
0

나는이 양식의 노드의 트리가 필요합니다나는

enter image description here I 출력 생산하기 위해 트리를 통과 할 수 있어야합니다

:

을 A/B + C

'노드'라고 표시된 노드가 구조이며, I 출력이 될 수 있도록 올바른 값을 포함하는 것들을있는 노드 알고

a를 초과하는 노드가 출력이 계속 될 것입니다 제거 할 때와 같은 노드/B 노드 노드 + 노드 C 노드

:

A/B + C 내가이 중위 순회를 구현해야한다고 생각

그러나 나는 제대로 작동하기 위해 무엇인가 얻으려고 애 쓰고 있습니다.

편집 :

루트, 노드, C, 노드, +, 노드, 노드 B, 노드, /, 노드,

:

public IEnumerable<Node> PostOrder(Node start, Func<Node, IEnumerable<Node>> getNeighbours) 
{ 
    HashSet<Node> visited = new HashSet<Node>(); 
    Stack<Node> stack = new Stack<Node>(); 
    stack.Push(start); 

    while (stack.Count != 0) 
    { 
     Node current = stack.Pop(); 
     visited.Add(current); 
     yield return current; 

     IEnumerable<Node> neighbours = getNeighbours(current).Where(node => !visited.Contains(node)); 

     foreach (Node neighbour in neighbours) 
     { 
      stack.Push(neighbour); 
     } 
    } 
} 

그러나이 목록을 반환

은 ...

+1

순회 주문을 시도 했습니까? –

+0

@LeoBartkus 예, 질문에 사용하려고했던 알고리즘을 추가하겠습니다. – cookies

답변

1
내가 바보했다

(왼쪽에서 오른쪽으로 이동)

출력을 반대로 바꾸면됩니다.

그 중 하나 일 -_-