プロが教えるわが家の防犯対策術!

このような場合どうしますか?

r = len(tree[m])
while r != 0:
m+=1
r = len(tree[m])
r リストの長さが0でない間は,mをひとつづつ増やしていきリストのながさが
0のリストまで増やすという意味です。
でも二回もrを定義しているのが良くないと思います

質問者からの補足コメント

  • tree は二重リストになっています

      補足日時:2022/07/05 17:58
  • *使わなかったけど

      補足日時:2022/07/05 17:59

A 回答 (9件)

> でも自分の力じゃないから自分でもやってみようと思いました。



頑張って下さい。

> 授業では再帰をつかっていました。たとえば
> def DFS(tree)
> のなかに
> DFS(xx)
> と

元々二分木自体が再帰的構造なんで、再帰関数と相性がいいんですよ。
フツーに反復とか、ループ構文を使うと逆にメンド臭くなるでしょう。
「データ構造に合わせた関数」を書く方が利口でしょうね。

ただ、Pythonは再帰が「かなり」苦手なんで(すぐスタックを消費してしまって、下手すればC言語の方が再帰が得意かも)、と言う事はPythonと言うヘナチョコ実装の要請により、反復を書かなければならない場合は出てくるかもしれません。
    • good
    • 0
この回答へのお礼

あなたに会えてよかった

ありがとうございます:)
あの質問ですけど、cametan_42さんは、ご教授などですか? 理由は、私の周りにもプログラミング大会で活躍したひととかいて、知識がすごいと思うけど、あなたのほうがすごそうだからです。

お礼日時:2022/07/06 18:14

> リスとのインデクっスのひとつめ、つまり、リストの中の何番目のリストか、が、木の実際の数字に対応しています。

そしてそのリストに入っている数字がその気がつながっている数字です。

もう誤字が酷いし、アレなんだけど、要するにリストのインデックスがvalueになってる、って事ね。
了解。

と言う事は、こういう事がしたいのかね?

実装例?:
https://ideone.com/h9S2S7
    • good
    • 1
この回答へのお礼

助かりました

はい。ごめんなさい。ありがとうございます。
でも自分の力じゃないから自分でもやってみようと思いました。
あと、授業では再帰をつかっていました。たとえば
def DFS(tree)
のなかに
DFS(xx)

お礼日時:2022/07/06 16:35

んじゃあ、木構造の図はアレでいいのね。



それでだな。

その木構造を

tree = [0, [1, 2], [3, 4], [5, 6], [], [], [], [], [], [], [], []]

みたいには表現出来ないと思うんだよな。
古典的な手法だと例えば、

tree = [0, [1, [3, [], []], [4, [] []]], [2, [5, [], []], [6, [], []]]]

みたいにして二分木を表現する。リストの枠組みを

[値, 左, 右]

みたいにして入れ子にしないとダメなんだよ。
その辺どう習ってんだろ?

重要なのは、関数を設計する前に「データ形式の定義」がキチンと成されてないと意味がない。

ただ、上の奴だと、理屈はともかくとして扱いづらいんで、例えば「連想リスト」と言うやり方を転用して

tree = [[0, 1, 2], [1, 3, 4], [3, [], []], [4, [], []], [2, 5, 6], [5, [], []], [6, [], []]]

とか書く事も可能。つまり、

[今の値(検索キー), 左の値, 右の値]

って設計して、左の値ならその値をキーとしてまた全体から検索する、とかね。
Pythonなら辞書型が使えるんで、

tree = {0: (1, 2), 1: (3, 4), 3: ([], []), 4: ([], []), 2: (5, 6), 5: ([], []), 6: ([], [])}

みたいにしてもいいんだけど、いずれにせよ、その辺、つまり「二分木をどう表現するか」をどう習ってるんだかサッパリ分からんのね。
逆に言うと、「データ設計方針」がハッキリすればどういう関数を書くのかはある程度自ずとから決まるわけ。

「二分木のデータ設計」はどういう風に習ってます?
    • good
    • 0
この回答へのお礼

ありがとう

ありがとうございます。
私はこのようにならています
tree = [[1,2], [3,4], [5,6], [7,8], [9,10], [11,12], [13,14], [], [], [], [], [], [], []]
たとえばこれで
0
1 2
3 4 5 6
7 8 9 10 11 12 13 14

リスとのインデクっスのひとつめ、つまり、リストの中の何番目のリストか、が、木の実際の数字に対応しています。そしてそのリストに入っている数字がその気がつながっている数字です。

お礼日時:2022/07/06 14:41

> 0


1 2
3 4 5 6

このようになっています。

こういう事?(下の写真)

んで、一応確認するけど、日本人ですよね?
何か日本語がカタコトなんで心配なんですが。

結局、仮に下の木の構造だとして「何をしたい」の?_
それとも下の木も間違ってる?
「結果的につかあなかったけど」の回答画像6
    • good
    • 0
この回答へのお礼

これはどう?

はい。ありがとうございます。私のしたかったことは、"通りがけ順"です。
1まず左側のノードに移動2

左側に移動できなくなったらデータ出力
3右側のノードに移動
の順で探索を行います。

はい。私は日本人ですけど日本に住んでいる時間はみなさんより短いです。

お礼日時:2022/07/06 13:43

> 本当は[[1.2], [3,4], [5,6],


[9,10], [11,12], [13,14], [], [], [], [] [] ,[] ,[]]
のようになっていて、リストの最初のインデックスの数字がつながてる数字を表しています。
例)1という数字は3と4についてる

二分木なのかね?
でも、

> 1という数字は3と4についてる

なら2はどこにぶら下がってるんだろ?
どうにも想像付かないなぁ。
それとも、1は3と2に分岐して、3は5と6に繋がってんのかしら?
    • good
    • 0
この回答へのお礼

がんばります

あのごめんなさい。
0
1 2
3 4 5 6

このようになっています。

お礼日時:2022/07/06 12:32

> アルゴリズムの授業で, 分岐した枝で、しれより下がなくなたことを判定したかたです。



まあ、treeって名付けてるから「木構造」に関連してるとは思ったんだけど、ただ、このリストは木構造を表してる?

> [[0],[1,2],[3,4],[],[]]

だとどうにも木に見えないんですが。
どういう木を前提にして書いてるんだろ?
これじゃあ上手く行かないような気がするんですが。

これは所与なの?それとも自分で考えました?
    • good
    • 0
この回答へのお礼

えとあんまりあってませんでした。本当は[[1.2], [3,4], [5,6],
[9,10], [11,12], [13,14], [], [], [], [] [] ,[] ,[]]
のようになっていて、リストの最初のインデックスの数字がつながてる数字を表しています。
例)1という数字は3と4についてる

お礼日時:2022/07/05 22:09

Javaのカテゴリに投稿してますけど、Pythonですかね。


rを使わない例:

tree = [[0],[1,2],[3,4],[],[]]
m = 0
while len( tree[m] ) > 0: m += 1
print( m )
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2022/07/05 21:38

> tree=[[0],[1,2],[3,4],[],[]]


のようになっていて、何も入っていないリストにたどり着く まで変数をたし増やします

ふむ。
まあ、データ形式はそれで良いとしよう。
でもまだ「何がやりたいのか」分かんないんだよねぇ。
何を得たいんだろ?10を得られればいい、とかそういう話?
    • good
    • 1
この回答へのお礼

ありがとう

ごめんなさい。アルゴリズムの授業で, 分岐した枝で、しれより下がなくなたことを判定したかたです。

お礼日時:2022/07/05 21:34

ごめん、何が言いたいんだかサッパリ分からん。



> tree は二重リストになっています

「二重リスト」って何?

そもそも

> mをひとつづつ増やしていきリストのながさが
> 0のリストまで増やすという意味です。

この意味がサッパリ分からん。
    • good
    • 1
この回答へのお礼

ごめんなさい。
tree=[[0],[1,2],[3,4],[],[]]
のようになっていて、何も入っていないリストにたどり着く まで変数をたし増やします

お礼日時:2022/07/05 19:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!