1

やあ皆さん、問題があります。return ステートメントが実行されていません。これは私のsudoコードです。ツリーを検索して、アイテムがツリー内にあるかどうかを確認します。

def search(self, i):
    if left child is None and right child is None
        if self.data == i:
            return True
        else:
            pass 
    elif self.data == i:
        return True
    else:
        if left child exists:
            return self.left.search(i)
        if right child exists:
            return self.right.search(i)

self.data == iif ステートメントが実行されても、コードは return True ステートメントを実行しない場合を除いて、コードは機能しているようです。これがなぜなのか誰か知っていますか?前もって感謝します!

編集: SELF パラメータを追加しました。そこにあるはずでしたが、タイプミスでした..

数字 3、8、2、1 をツリーに挿入し、1 を検索しました。左の子が None で右の子が None の場合に print ステートメントを追加しました: if self.data == i: print('self.data == i') return True 1 を検索するときにその print ステートメントを追加したところ、print ステートメントが印刷されました。これは、if ステートメントが実行されたことを意味しますが、return True ステートメントは実行されません。

4

1 に答える 1

1

二分探索をしようとしていると思いますが、その場合、コードに問題があります。条件が満たされないため、おそらく return ステートメントは実行されませself.data == iん。また、ルートに左の子がある場合、元のコードでは右の子が表示されないことに注意してください。

これは線形検索の実装です。二分検索に変更する演習として残します。

def search(self, i):
    if self.data == i:
        return True

    if self.left is not None:
        if self.left.search(i):
            return True
    if self.right is not None:
        return self.right.search(i)
    return False
于 2013-04-05T04:04:20.500 に答える