2017-11-24 3 views
2

私はこのようなスタックを使用して、ツリートラバーサルアルゴリズムしている場合:スタックを使用してツリーをトラバースするとき、ツリーの深さをどのように追跡するのですか?

input: root 
push root onto stack 
while stack not empty: 
    pop current node off stack 
    mark current as visited 
    for each of current node's successors: 
     if successor not visited: 
      push successor onto stack 

を、私は私のツリーの最大の深さを与えるために、このアルゴリズムを変更することができる簡単な方法はありますか?私は再帰を使用している場合、それを行う方法を考えることができますが、私はスタックメソッドを使用してそれを行う方法を考えてちょっと立ち往生しています。

+1

@rici @深度最初の検索の場合のみ動作すると思います – Imran

+1

@imran:確かにtrueです。 – rici

+1

@imran:擬似コードをもっと詳しく見てもらえるようになりました。本当にツリーの場合、マーキングする必要はありません。木でない場合は、「最大深度」の概念を明確にする必要があります。 – rici

答えて

3

ノードとその深さをスタックにプッシュし、それまでに見た深さを最大限に追跡することができます。

input: root 
push (root, 0) onto stack 
max_depth = 0 
while stack not empty: 
    pop current (node, depth) off stack 
    if depth > max_depth: 
     max_depth = depth 
    mark current as visited 
    for each of current node's successors: 
     if successor not visited: 
      push (successor, depth+1) onto stack 

return max_depth 
関連する問題