2012-01-07 7 views
4

cで赤い黒のツリーが完成しましたが、レベル順に印刷するのは難しいです。私はprint-inorderを持っていますが、私はコンソールプリントでそれをツリーとしてどのように表示するのか想像できません。実現可能ですか?ここにBFSやDFSを実装できますか?私はwikiでアルゴリズムを見つけましたが、私はそれを適用できません。 誰かがC言語のコードを持っていれば、私はそれを勉強できるようにここに投稿することができますか?あなたはBFSを行うことができますが、それはあなたにC.擬似コードでFIFOキューを実装する手間を省くになるので、iterative deepening searchを行うことが容易であるかもしれない赤い黒のツリーが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

のwikiから この宿題ですか?もしあればタグを付けてください。 – dasblinkenlight

+1

よく赤い黒い木は宿題でした。その形で印刷することはできません。その私のためだけ:) – BugShotGG

答えて

4

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

私はルートからリーフ(左と右の子供がヌルに等しい)への単一のツリーの移動を行い、私が満たしたノードを数えることができます。おおよその高さを与えるはずですか? – BugShotGG

関連する問題