質問

これらのことをするためのアルゴリズムを手伝ってもらえますか?私は予約注文、Inorder、およびPostorderが実装されており、これらの注文のいずれかでツリーを横断するヒントが与えられています。 Dottyを使用してノードにラベルを付けます(または「訪問」します)。

深さは、根から底の葉までのエッジの数なので、私が移動するたびに+1を深さに追加しますか?そんな感じ?

子孫のアルゴリズムについては知りません。彼らは、特定のノードがそれ自体の下に持っているノードの数について尋ねています。

これらは通常の木です。

役に立ちましたか?

解決

depth(tree) = 1+ max(depth(tree.left), depth(tree.right));

descendants(tree) = descendants(tree.left) + descendants(tree.right);

どちらの場合も、ヌルポインターのために0を返すと再帰が終了します。

他のヒント

これは宿題の質問ですか?私の答えは、それが宿題のためであると仮定しています。

木は再帰的なデータ構造であるため、それらを動作させるアルゴリズムはしばしば再帰的です。再帰アルゴリズムには、基本ケースと帰納的ケースが必要です。ツリーの場合、ベースケースは、リーフノード(つまり、子供のないノード)にアクセスしているときに行うことです。帰納的ケースは、内部ノードにアクセスしているときに行うことです(つまり、少なくとも1人の子供を持つノード)。

深さ(またはツリーの「高さ」)を計算するには:

  • 基本ケース:子供のいないノードの深さはどれくらいですか?
  • 帰納的ケース:すべての子供の深さがあることを考えると(これは違う可能性があります)、訪問している現在のノードの深さはどれくらいですか?

子孫数を計算するために:

  • 基本ケース:子供のいないノードには何人の子孫がいますか?
  • 帰納的ケース:あなたのすべての子供の子孫数を知っていることを考えると、あなたが訪問している現在のノードの子孫数は何ですか?

明確な質問をすることをお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top