第1关:前序、中序、后序遍历
代码块:
from binaryTree import BinaryTree
'''请在Begin-End之间补充代码, 完成 preorder()、inorder()、postorder()'''
#getRootVal()根结点getLeftChild() 左子树 getRightChild()右子树
# 前序遍历
def preorder(tree):
if tree!=None: # 如果当前树的根结点为空,就递归结束
# ********** Begin ********** #
print(tree.getRootVal(),end=' ') #访问根结点
preorder(tree.getLeftChild()) #遍历左子树
preorder(tree.getRightChild()) #遍历右子树
# ********** End ********** #
# 中序遍历和后序遍历跟前序遍历的语句是一样的,只是次序不一样
# 中序遍历
def inorder(tree):
if tree != None:
# ********** Begin ********** #
inorder(tree.getLeftChild()) #遍历左子树
print(tree.getRootVal(),end=' ') #访问根结点
inorder(tree.getRightChild()) #遍历右子树
# ********** End ********** #
# 后序遍历
def postorder(tree):
if tree != None:
# ********** Begin ********** #
postorder(tree.getLeftChild()) #遍历左子树
postorder(tree.getRightChild()) #遍历右子树
print(tree.getRootVal(),end=' ') #访问根结点
# ********** End ********** #
第2关:后序遍历法重写表达式求值
代码块:
import operator
from parsetree import buildParseTree
'''请在Begin-End之间补充代码, 完成函数postordereval()'''
# 后序遍历法进行表达式求值
def postordereval(tree):
opers = {'+':operator.add, '-':operator.sub, '*':operator.mul, '/':operator.truediv}
res1 = None # 用来存储左子树求得的值
res2 = None # 用来存储右子树求得的值
if tree: # 如果当前树根结点不为空才进行以下求值操作
# ********** Begin ********** #
res1=postordereval(tree.getLeftChild())#获取左子树
res2=postordereval(tree.getRightChild()) #获取右子树
# ********** End ********** #
if res1 and res2: # 如果左子树和右子树都成功返回值
# ********** Begin ********** #
# operator模块包括一系列对应Python内部操作符的函数
return opers[tree.getRootVal()](res1,res2)
# ********** End ********** #
else:
# ********** Begin ********** #
return tree.getRootVal()
# ********** End ********** #
pt = buildParseTree(input())
第3关:中序遍历生成全括号中缀表达式
代码块:
from parsetree import buildParseTree
'''请在Begin-End之间补充代码, 完成函数 printexp()'''
# 中序遍历法生成全括号中缀表达式
def printexp(tree):
sVal = "" # 用来存储中缀表达式字符串
if tree: # 如果当前树根结点不为空才进行以下操作
# ********** Begin ********** #
if tree.getLeftChild():#先获取左子树
sVal='('+printexp(tree.getLeftChild())
sVal+=str(tree.getRootVal())#获取根节点
# ********** End ********** #
if tree.getRightChild():#最后获取右子树
# ********** Begin ********** #
sVal+=printexp(tree.getRightChild())+')'
# ********** End ********** #
return sVal
pt = buildParseTree(input())