在Python中实现和/或树
我想在Python中实现一个与或树,这样我就可以评估布尔表达式。我想到创建一个类,这个类里面包含andNode
、orNode
和leafNode
。前两个是内部节点,必须有与(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