いつもお世話になっています。
リカージョンを使って、バイナリーツリーのノードの数を調べるメソッドを作っているんですが、
boolean isEmpty()
ツリーのノードが0ならtrueを返す
RecBinTree leftSubtree()
ルートの左のサブツリーを返す
RecBinTree reightSubtree()
ルートの右のサブツリーを返す
この3つのメソッドを使っていいのですが、
public static int numNodes( RecBinTree t){
int result;
if( !t.isEmpty()){
???
}
return result;
}
この???部分をどのように埋めたら、resultに全てのノードの数が帰るようにできるでしょうか?
きっと単純なコードなんだろうけど、なんだかさっぱりわからなくなってしまっています。
いってる意味が分からなかったらごめんなさい。
どなたか教えて頂けたら幸いです。私にはもう無理みたいなんで・・。よろしくお願いします。
No.4ベストアンサー
- 回答日時:
#3>1を足すのは、一番先端のルートを数えるためなんでしょうか?
今調べようとしているノードtがisEmpty でないということは、
tが少なくともノードになっているということですよね。
左のノード←t→右のノード
となっていて
左のノードは、0かもしれないし、いくつかあるかもしれない
右のノードは、0かもしれないし、いくつかあるかもしれない
けど、とりあえず、現時点でtがノードであることは分かっているので、自分自身の1を足します。
No.5
- 回答日時:
ちょっと確認です。
いわゆる二分木(バイナリツリー)でいうところの「葉」の数は
「ノード」の数には含まれないのでしょうか?
#「葉」→子供を持たない一番下の要素
isEmptyは葉のときにtrue を返し、かつ全体のノードの数に含めると思ったのですが。
で、
> 右と左のサブツリーを返すメソッドを繰り返していると、最終的にはルート(自分)が返ってくるのでしょうか?
あるノードから数えたすべてのノードの数は、そのノードの右側の
子供の合計と左側の子供の合計+1(自分)です。で、その子供の下にある
ノードの数を求めるには、その子供が持っている孫の合計+1とします
(これはいいですか?)
これをひ孫→玄孫→その子供… と末端に行くまで潜っていくわけです。
図が描けるといいんですけどねえ(^^;
参考URL:http://ja.wikipedia.org/wiki/%E4%BA%8C%E5%88%86% …
葉の数は、ノードの数に含まれています。ツリーの全てのエレメントを数えたかったんです。
おかげで大分分かってきました。本当にありがとうございます。
No.3
- 回答日時:
public static int numNodes( RecBinTree t){
int result;
if( t.isEmpty()){
result = 0;
} else {
result = 1 + numNodes(t.leftSubtree()) + numNodes(t.rightSubtree()); // right → reight?
}
return result;
}
てな感じでいいんじゃないかなあ、よくわからないけど
また回答いただいてありがとうございます!
rightSubtree() と leftSubtree() で返ってきた
ものを足すんですね。1を足すのは、一番先端のルートを数えるためなんでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# C言語 ポインタ 配列 2 2022/06/02 17:29
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- XML マスターノード 1 2023/03/14 10:38
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列にnullを代入すると、null...
-
プログラミングの問題です。大...
-
eclipseで作ったプログラムを他...
-
eclipse実行ができない
-
Processingでマウスクリックで...
-
JSFタグのfタグとは
-
JAの支部?地域の農協のカード...
-
問題作成のWebアプリの作り方を...
-
正規表現について質問です。 カ...
-
下記問題の答えが"D"になる意味...
-
JaneStyleのスレッドが見れなく...
-
キー入力について
-
jdk17.06のインストーラーが起...
-
えハミルトン路と全域木のちが...
-
CSV出力を画面から選択したデー...
-
ショートカットキーについて
-
list の空は [] ってあわらすのに
-
あんまりお料理しないのに台所...
-
質問です。 配列が100以上の場...
-
次のhtml・cssでspan内の文字を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アコーディオンメニューにする...
-
iText セル内での自動改行について
-
Listでintの最大値を超える要素...
-
Aタグのhrefの値を取得したいの...
-
或る文字列の文字数が一定数以...
-
JS node.childNodesの仕様について
-
jtreeのノードを右クリックで選...
-
こんばんは。 メガメニューを今...
-
jQuery UIのDroppableにて
-
jQueryについて
-
ajaxで読み込んだDOMに対してin...
-
URL+URN=URI と習ったのですが...
-
iアプリで改行する方法を教えて...
-
新しいパソコンのネット設定な...
-
collection型を引数にしたファ...
-
(再質問)エクセルのマクロボ...
-
mとnを入力 mからnまでを加算し...
-
<p> </p>ってまずいの?
-
六本組み木の作り方を教えて下...
-
汎用機のJCLの入門書ありま...
おすすめ情報