2017-11-06 11 views
1

私は再帰を伴うツリーのサイズを見つける方法を知っていますが、再帰なしでそれを見つける方法は不明です。 これまで私が持っていたことがあります。私はそれが私が木を横切るのを妨げている私のif文であると思う。あなたは、反復1に再帰的なソリューションを変換したいときはいつでもバイナリ検索ツリーのサイズを再帰なしにどのように見つけることができますか?

public int size() { 
    size = 0; 
    NodeWord current = root; 
    while(current != null) { 
     if(current.left != null) { 
      size++; 
     } 
     else { 
      current = current.right; 
     } 
    } 
    return size; 
} 
+1

何を試してみましたか、具体的な問題はありますか?また、https://softwareengineering.meta.stackexchange.com/questions/6166/open-letter-to-students-with-homework-problemsを参照してください – Oleg

+0

この質問を編集してコードを投稿できますか?あなたがしようとしたことを私たちに教えてください。 –

答えて

1

は、あなたがStackを使用することができます。

  • この場合、あなたはNodeは、二分探索木のNodeあるStack<Node>を、使用することができます。

  • まず、ルートNodeをスタックにプッシュします。

  • 次に、スタックが空になるまで続けるwhileループを作成します。あなたがStackのトップNodeでのぞくとStackにそのNodeの子供たちをプッシュすることができますwhileループの各反復で

  • 。子どもがいない場合は、のうちNodeをポップして、それに必要な計算を行います(例ではカウンタを増やすだけです)。

  • 現在のNodeとその2つの子を、ツリーの走査順序に応じてプッシュ/ポップする順序を変更できます。
+0

それは本当に有益なおかげです。バイナリ検索ツリーに関する1つのフォローアップの質問がありました。 BSTのレベルが意味するもの1つのレベルでブランチまたはサブツリー全体が記述されていますか? – Vmax20

関連する問題