class Node: content = None leftChild = None rightChild = None def __init__(self, *args): self.content = args[0] if len(args) >= 3: self.leftChild = args[1] self.rightChild = args[2] def dfs_inorder(node): if node.leftChild: print '(', dfs_inorder(node.leftChild) print node.content, if node.rightChild: dfs_inorder(node.rightChild) print ')', def dfs_postorder(node): if not node: return dfs_postorder(node.leftChild) dfs_postorder(node.rightChild) print node.content, def dfs_preorder(node): if not node: return print node.content, dfs_preorder(node.leftChild) dfs_preorder(node.rightChild) def eval(node): if node.content == '+': return eval(node.leftChild) + eval(node.rightChild) elif node.content == '-': return eval(node.leftChild) - eval(node.rightChild) elif node.content == '*': return eval(node.leftChild) * eval(node.rightChild) elif node.content == '/': return eval(node.leftChild) / eval(node.rightChild) else: return node.content root = Node('*', Node('+', Node(3), Node(4)), Node('/', Node(10), Node('-', Node(7), Node(2)))) dfs_inorder(root) print dfs_postorder(root) print dfs_preorder(root) print print eval(root)