树的遍历(前序、中序、后序)

第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())

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值