1

私のpythonプログラムで問題が発生して申し訳ありません。まず第一に、私はここの初心者で、中国の学生です。下手な英語を許してください。問題を明確に表現するために最善を尽くします。

エラーコードは次のとおりです。

        def __find__(self,node,value):
            if value<node.v:
                self.__find__(node.l,value)
            elif value>node.v:
                self.__find__(node.r,value)
            elif value==node.v:
                return node.obj

        def Find(self,value):
            obj=self.__find__(self.r,value)
            print obj
            return obj

find関数でnode.obj を出力するとうまくいきますが、Find 関数で obj を出力すると None が返されます。
この質問は一日中私を悩ませています。誰かがそれを解決できれば、それは非常に高く評価されます。

みんなありがとう

ここに完全なコード: BTS ツリーを書くだけです:

    ####class####

    class BSTtreeNode:
        def __init__(self,lnode=None,rnode=None,parent=None,value=None,obj=None):
            self.l=lnode
            self.r=rnode
            self.p=parent
            self.v=value
            self.obj=obj


    class BSTree:
        def __init__(self,RootNode=None):
            self.r=RootNode
        def Insert(self,value,obj):
            self.__insert__(self.r,value,obj)
        def __insert__(self,node,value,obj):
            if value<=node.v:
                if node.l==None:
                    localnode=BSTtreeNode(lnode=None,rnode=None,parent=node,value=value,obj=obj)
                    node.l=localnode
                elif node.l!=None:
                    self.__insert__(node.l,value,obj)
            if value>node.v:
                if node.r==None:
                    localnode=BSTtreeNode(lnode=None,rnode=None,parent=node,value=value,obj=obj)
                    node.r=localnode
                elif node.r!=None:
                    self.__insert__(node.r,value,obj)

        def __find__(self,node,value):
            if value<node.v:
                self.__find__(node.l,value)
            elif value>node.v:
                self.__find__(node.r,value)
            elif value==node.v:
                return node.obj

        def Find(self,value):
            obj=self.__find__(self.r,value)
            print obj
            return obj
        def Print(self):
                self.__printTree__(self.r)  

        def __printTree__(self,node):
                if node.l==None and node.r==None:
                    print node.v,node.obj
                    return 
                elif node.r != None:
                    self.__printTree__(node.r)
                elif node.l !=None:
                    self.__printTree__(node.l)
                print node.v,node.obj


    def main():
        mNode=BSTtreeNode(value=10,obj="first")
        bstree=BSTree(RootNode=mNode)
        bstree.Insert(value=20,obj="second")
        bstree.Insert(30,obj="second")
        bstree.Print()
        bstree.Find(value=20)

    if __name__ =="__main__":
        main()
4

2 に答える 2

4

return関数にいくつかの sがありません__find__。の両方のオカレンスをself.__find__(...)に変更しreturn self.__find__(...)ます。

def __find__(self, node, value):
    if value < node.v:
        return self.__find__(node.l, value)
    elif value > node.v:
        return self.__find__(node.r, value)
    elif value == node.v:
        print node.obj
        return node.obj

def Find(self, value):
    obj = self.__find__(self.r, value)
    print obj
    return obj

関数を再度呼び出しますが、値を返しません。明示的に値を返さないため、None暗黙的に返されます。

于 2013-05-20T03:58:01.017 に答える
1

コードを次のように変更する必要があります。

def __find__(self,node,value):
    if value<node.v:
        return self.__find__(node.l,value)
    elif value>node.v:
        return self.__find__(node.r,value)
    elif value==node.v:
        return node.obj
于 2013-05-20T04:00:24.833 に答える