再帰を使用してバイナリ検索ツリーに値を挿入しようとしていますが、これをinorderトラバーサルを使用して実行すると、Noneという出力が得られます。私はこれを実装している他の言語を見ようとしましたが、コピーしようとしましたが動作しません。私はツリーのルートを挿入関数に渡しています。空でなければ、左右どちらかを横切ることを期待していました。誰かがこれに間違っていることを教えてもらえますか?私はbst.get_root()にbst.rootを作ろうとしましたが、それと同じ結果が得られます。Pythonで再帰を使用してバイナリ検索ツリーに挿入
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
class BinaryTree:
def __init__(self):
self.root = None
self.size = 0
def get_size(self):
return self.size
def get_root(self):
return self.root
def insert(self, root, value):
if root is None:
root = Node(value)
else:
if value < root.value:
root.left = self.insert(root.left, value)
else:
root.right = self.insert(root.right, value)
return root
def inorder(self, root):
if root == None:
return
else:
self.inorder(root.left)
print(root.value, end=" -> ")
self.inorder(root.right)
bst = BinaryTree()
bst.insert(bst.root, 2)
bst.insert(bst.root, 4)
bst.insert(bst.root, 3)
bst.insert(bst.root, 1)
print(bst.inorder(bst.root))
こんにちは@アスタリスク、ありがとうございました。なぜこれが動作し、私のコードはしなかったのですか? self.rootにinsert関数を割り当てる必要があるのはなぜですか?また、これを1つの関数で行うことは可能ですか? – mike26
もちろん、問題は、あなたのルートとしての挿入結果を保存しないということです。コードを次のように変更した場合:bst = BinaryTree() bst.root = bst.insert(bst.root、2) bst.root = bst.insert(bst.root、4) bst.root = bst。挿入(bst.root、3) bst.root = bst.insert(bst.root、1)。それも動作します。 – Asterisk
投票者が私の答えに何が問題であるか説明できますか?フィードバックありがとう!説明のために – Asterisk