मैं अजगर और एल्गोरिथ्म के लिए काफी नया हूं और मैं इसके बाहर के बजाय कक्षा के अंदर एक समारोह घोषित करना चाहता हूं। मेरे पास अब निम्नलिखित हैं:

एक सामान्य वृक्ष वर्ग NAryTree कार्यान्वयन:

class NAryTree:
    def __init__(self, key):
        self.key = key
        self.children = []
    def __str__(self):
        return str(self.key)
    def addChild(self, tree):
        self.children.append(tree)
    def getChild(self, k):
        return self.children[k]
    def getNChildren(self):
        return len(self.children)
    def __iter__(self):
        return self.children.__iter__()
    def __next__(self):
        return self.children.__next__()

उपट्री के न्यूनतम योग की गणना करने के लिए एक फ़ंक्शन minSubtree(tree):

def minSubtree(tree):
    value = tree.key
    for child in tree:
        value += min(minSubtree(child), 0)
    return value

और एक बिल्ड ट्री फ़ंक्शन buildMyNAryTree():

def buildMyNAryTree():
    root = NAryTree(1)

    root.addChild(NAryTree(-2))
    root.addChild(NAryTree(3))
    root.addChild(NAryTree(4))

    root.getChild(0).addChild(NAryTree(-5))
    root.getChild(1).addChild(NAryTree(6))
    root.getChild(1).addChild(NAryTree(7))
    root.getChild(2).addChild(NAryTree(-8))

    root.getChild(0).getChild(0).addChild(NAryTree(-9))
    root.getChild(0).getChild(0).addChild(NAryTree(-10))
    root.getChild(0).getChild(0).addChild(NAryTree(11))
    root.getChild(1).getChild(0).addChild(NAryTree(-4))
    root.getChild(1).getChild(1).addChild(NAryTree(12))
    root.getChild(1).getChild(1).addChild(NAryTree(-13))
    root.getChild(2).getChild(0).addChild(NAryTree(14))
    return root

मैं जो चाहता हूं वह कक्षा के अंदर minSubtree(tree) घोषित करना है, हालांकि मुझे नहीं पता कि पैरामीटर को कैसे बदला जाए। दूसरे शब्दों में, मैं minSubtree(buildMyNAryTree()) के बजाय buildMyNAyTree().minSubtree() का उपयोग करके सबट्री का न्यूनतम योग वापस करना चाहता हूं।

2
Alex Wang 16 अक्टूबर 2018, 12:01

1 उत्तर

सबसे बढ़िया उत्तर

फ़ंक्शन को क्लास बॉडी के अंदर होने के लिए इंडेंट करें, और कन्वेंशन द्वारा, tree का नाम बदलकर self करें। minSubtree(child) के बजाय child.minSubtree() पर पहुंचें।

class NAryTree:
    # your other methods
    def minSubtree(self):
        value = self.key
        for child in self:
            value += min(child.minSubtree(), 0)
        return value

print(buildMyNAryTree().minSubtree()) -32 का उत्पादन करता है।

3
timgeb 16 अक्टूबर 2018, 09:11