質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

974閲覧

Python ノードの全選択

lemon-tea

総合スコア2

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/06/13 00:39

編集2021/06/13 00:58

前提・実現したいこと

classに作った要素を全て選択する方法を知りたい
ここに質問の内容を詳しく書いてください。
二分探索を用いた時にたとえば2,5,3,4,1と順番に値を持つノードを二分木に入れてそれらが何番目に小さい要素なのかをカウントする関数を再起的に入れたいと思っております。このときに
for i in ●●
のようにclassのノードを全選択するコードの書き方を知りたいのですが何かしら方法がありましたらご教授ください
recountのような操作を組み込みたいのですが、どのようにすればいいのかわからなかったです。

Python

1class Bintree7(Bintree): 2 def __init__(self,key=None,data=None,count=None): 3 super().__init__(key=None,data=None) 4 self.count=count 5 def recount(self,count,m): 6 if self.count>=m: 7 self.count += 1 8 if self.left != None: 9 self.left.recount(count,m) 10 if self.right != None: 11 self.right.recount(count,m) 12 return 13 def insert(self,key,data): 14 if self.key == None: 15 self.key = key 16 self.data = data 17 self.count = 1 18 return self 19 if key < self.key: 20 if self.left == None: 21 m=self.count 22 self.left = self.__class__(key,data) 23 self.left.count=m 24 return True 25 else: 26 return self.left.insert(key,data) 27 elif key > self.key: 28 if self.right == None: 29 m=self.count 30 31 self.right = self.__class__(key,data) # selfと同じクラスのオブジェクトを生成する 32 self.right = m+1 33 return True 34 else: 35 return self.right.insert(key,data) 36 else: # key == self.key: 37 return False

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/06/13 01:24

大学か何かの課題か知りませんが、「classのノードを全選択するコードの書き方を知りたい」「recountのような操作を組み込みたい」ってことですけど、そもそも質問文記載のBintree7が、recount関数の組み込み以前に、きちんと動いていることは貴方の方で検証済みなんでしょうか? その基本となる部分で動くコードを示してから「classのノードを全選択するコードの書き方を知りたい」っていう質問をしないと、二分探索木の基本的な部分の修正・作成まで丸投げしてるってことになるんじゃないですかね。
guest

回答2

0

「classのノードを全選択する」と「recountのような操作」は、
同じではないのでよく検討して下さい。

想定してるリストは、「子ノードを全て」では有りませんか?

意図は違うかもしれませんが、「クラスのインスタンス全て」だった場合は、
複数の二分木を作った時に、共通の親を持たないので順序が不定になります。


for i in ●●のように

二分木をネストした長さ2のリストとみなすと解りやすくなるはず、
ネストした構造を平坦化するには、yield from が使えます。

親クラスで .left .right が正しく実装されていると仮定して

python

1 2 def __iter__(self): 3 4 yield self 5 6 if self.left: 7 yield from self.left 8 9 if self.right: 10 yield from self.right 11

投稿2021/06/13 02:23

teamikl

総合スコア8760

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

python

1class Bintree7(Bintree): 2 instances = [] 3 def __init__(self,key=None,data=None,count=None): 4 super().__init__(key=None,data=None) 5 self.count=count 6 Bintree7.instances.append(self)

としておいて

python

1for i in Bintree7.instances:

でできます。

投稿2021/06/13 01:22

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teamikl

2021/06/14 00:13

「classのノードを全選択」を字面通りに解釈されたのだと思うけど、 「recountのような操作」にはなってませんよ。 クラス変数にインスタンスを溜めてるので、複数の根を持つ木を区別出来ないし、 取り出す順序が二分木の構造に関係なくノードの生成順になってるはずです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問