2014-03-05 27 views
-2

我需要實現一個Python和/或樹,以便我可以評估布爾表達式, 我不得不創建一個包含andNodeorNodeleafNode類的想法。前兩個是必須有and或or值,則leafNode必須與整數值,代表tree.I的最後葉試過,但它似乎並沒有工作,內部節點:執行和/或樹蟒

class Node: 
    def __init__(self,leaf): 
    self.orNode = None 
    self.andNode = None 
    self.leaf = leaf 

class and_or_tree (Node): 
    def __init__(self): 
     self.root=None 

我需要測試一個元素是否存在於樹中,高度並遍歷它。

+0

歡迎StackOverflow上。 「似乎沒有工作」是**從來沒有**一個很好的診斷。發生了什麼 ?是否有錯誤訊息?還是意外的結果?請**編輯**您的問題,以確保它不起作用。 – hivert

+0

我的意思是,我不知道如何添加或如何使用它,我在python是新的元素,我想,因爲我認爲這是存儲在一個緊湊的方式大布爾表達式的最好的一個使用這種結構。 – user3382344

+0

「我不知道如何添加元素或如何使用它」。你嘗試過什麼嗎?那麼請向我們展示你的嘗試以及他們爲什麼失敗。我們不會爲你編寫代碼。我們在這裏幫助,但不是爲你工作。 – hivert

回答

2

我覺得這種葉子的例子,和/或節點可能是這樣的:

class Leaf: 
    def __init__(self, v): 
     self.val = v; 

    def __call__(self): 
     return self.val 


class AndNode: 
    def __init__(self, l, r): 
     self.left = l; 
     self.right = r; 

    def __call__(self): 
     return self.left() and self.right() 



class OrNode: 
    def __init__(self, l, r): 
     self.left = l; 
     self.right = r; 

    def __call__(self): 
     return self.left() or self.right() 

您可以構建一個樹是這樣的:

print AndNode(Leaf(True), Leaf(False))() 
print AndNode(OrNode(Leaf(True), Leaf(False)), Leaf(True))() 

它輸出這樣的:

False 
True 
+0

由於爲您的答覆,它完美的作品!葉類接受我的整數值,我有正確的表達式。我可以平靜地走下去。 – user3382344