2012-01-07 4 views
4

C에서 빨간색 검은 색 트리를 완성했으며 레벨 순서로 인쇄하기가 어렵습니다. 나는 print-inorder를 가지고 있지만 콘솔 프린트의 트리로 그것을 어떻게 표시해야하는지 상상할 수는 없다. 그것은 실현 가능합니까? 여기에 BFS 또는 DFS를 구현할 수 있습니까? 위키에서 알고리즘을 찾았지만 적용 할 수 없습니다. 누군가 C 언어로 코드를 작성하면 여기에 게시하여 공부할 수 있습니까? 위키에서 :C의 레벨 순서로 빨간색 검은 색 트리가 인쇄됩니다.

levelorder(root) 
    q = empty queue 
    q.enqueue(root) 
    while not q.empty do 
    node := q.dequeue() 
    visit(node) 
    if node.left ≠ null 
     q.enqueue(node.left) 
    if node.right ≠ null 
     q.enqueue(node.right) 
+2

을 이 숙제가 있니? 있다면 태그하십시오. – dasblinkenlight

+1

빨간색 검은 색 나무가 숙제였습니다. 그 형태로 인쇄하는 것은 아닙니다. 그 단지 나를 위해 :) – BugShotGG

답변

4

당신은 BFS 할 수 있지만, 당신에게 C. 의사 코드에서 FIFO 큐를 구현하는 문제에 저장하기 때문에 iterative deepening search을하는 것이 더 쉬울 수 있습니다

algorithm iterative-deepening(root) 
    D = max-depth(root) 
    for d=0 to D 
     depth-limited-search(root, d) 

/* variant of DFS */ 
algorithm depth-limited-search(node, d) 
    if node != NULL 
     if d == 0 
      print node.contents 
     else 
      depth-limited-search(node.left, d - 1) 
      depth-limited-search(node.right, d - 1) 
+0

잘 RBT의 최대 깊이를 찾을 수 있습니까? 어떻게하면 데이터를 삽입 할 때 카운터를 추가해야합니까? – BugShotGG

+0

@GeoPapas : 깊이를 얻을 수있는 많은 옵션이 있습니다. 레드 - 블랙 트리의 속성은 요소의 수에 따라 특정 최대 깊이를 보장합니다. DFS를 수행 할 수도 있습니다. –

+0

그래서 나는 루트에서 리프 (왼쪽과 오른쪽 자식이 null 인)로 단일 트리를 만들 수 있고 내가 만난 노드를 셀 수 있습니다. 그건 대략적인 높이 야? – BugShotGG