Decode360's Blog

业精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

  BlogJava :: 首页 :: 新随笔 :: 联系 ::  :: 管理 ::
  397 随笔 :: 33 文章 :: 29 评论 :: 0 Trackbacks
前/中/后缀表达式的转换
 
    自然表达式转换为前/中/后缀表达式,其实是很简单的。首先将自然表达式按照优先级顺序,构造出与表达式相对应的二叉树,然后对二叉树进行前/中/后缀遍历,即得到前/中/后缀表达式。
 
    举例说明将自然表达式转换成二叉树:
 
    a×(b+c)-d
 
    ① 根据表达式的优先级顺序,首先计算(b+c),形成二叉树
    Expression01
   
    然后是a×(b+c),在写时注意左右的位置关系
    Expression02
 
    最后在右边加上 -d
    Expression03
 
 
    然后最这个构造好的二叉树进行遍历,三种遍历的顺序分别是这样的:
 
    ① 前序遍历:根-左-右
    中序遍历:左-根-右
    后序遍历:左-右-根
 
    所以还是以刚才的这个例子,在最终二叉树的基础上可以得出:
 
    前缀表达式:-*a+bcd
    中缀表达式:a*b+c-d
    后缀表达式:abc+*d-
 
 
一些其他的遍历原则:
 
    1、深度优先遍历:
 
    首先访问出发点V,并将其标记为已访问过;然后依次从V出发搜索V的每个邻接点W。若W未曾访问过,则以W为新的出发点继续进行深度优先遍历,直至图中所有和源点V有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止。若此时图中仍有未访问的顶点,则另选一个尚未访问的顶点作为新的源点重复上述过程,直至图中所有顶点均被访问为止。
 
    2、广度优先遍历:
 
    首先访问出发顶点V,然后访问与顶点V邻接的全部未被访问过的顶点W0,W1,...WK-1;接着再依次访问与顶点W0,W1,...WK-1邻接的全部未被访问过的顶点,以此类推,直至图的所有顶点都被访问到,或出发顶点V所在的连通分量的全部顶点都被访问到为止。
 
    注:对于树来说,深度优先就是从左到右,从上到下;广度优先就是从上到下,从左到右。
 
 
posted on 2009-05-21 22:41 decode360 阅读(483) 评论(0)  编辑  收藏 所属分类: 01.IT_Base

只有注册用户登录后才能发表评论。


网站导航: