在Python中实现和/或树

-1 投票
1 回答
1080 浏览
提问于 2025-04-17 20:54

我想在Python中实现一个与或树,这样我就可以评估布尔表达式。我想到创建一个类,这个类里面包含andNodeorNodeleafNode。前两个是内部节点,必须有与(and)或或(or)的值,而leafNode必须有一个整数值,代表树的最终叶子。我试过这样做,但似乎不太成功:

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

我需要测试树中是否存在某个元素,还要知道树的高度,并遍历它。

1 个回答

3

我觉得这样的叶子节点和/或节点的例子可以是这样的:

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

撰写回答