当前位置:首页 > 初赛 > 正文内容

信息学奥赛知识点(十三)----树和二叉树(下)

亿万年的星光10个月前 (06-13)初赛859

一、表达式的求法

考试中有经常出现类似于“中缀表达式转后缀”,“前缀表达式转后缀”等。如果能画出唯一的二叉树那么便根据二叉树的结构之间求解即可,有些情况很难直接画出二叉树。还有通过加括号的方式进行求解,还有利用栈的方法求表达式。

(1) 【中缀转后缀:利用栈】

规则:①从左往右遇到操作数直接输出 

②遇到操作符,放入栈中

③遇到左括号,入栈

      ④遇到右括号,出栈(直到遇到左括号,左括号只弹出不输出)

 ⑤遇到其他操作符,弹出所有优先级大于或者等于该运算符的栈顶元素,然后将该运算符入栈

 ⑥最终将栈中元素依次输出

【例题】:将a+b*c+(d*e+f)*g转换成后缀表达式

画图如下:









*

*




*

*


(

(

(

(

+

+

+

+

+

+

+

+

+

+

遇到a,

显示a

遇到+,

显示a

遇到b,

显示ab

遇到*,

显示ab

遇到c,

显示abc

遇到+,

显示abc*+

遇到(,

显示abc*+

遇到d,①

显示abc*+d

遇到*,②

显示abc*+d

遇到e,①

显示abc*+de

 

+

+





(

(


*

*


+

+

+

+

+


遇到+,

显示

abc*+de*

遇到f,

显示

abc*+de*f

遇到),④

显示

abc*+de*f+

遇到*,②

显示

abc*+de*f+

遇到g,
显示
abc*+de*f+g

显示

abc*+de*f+g*+

 

【中缀转后缀:括号法】

① 根据运算符的优先级对中缀表达式加括号(有几个运算符就有几对括号)(原本有的括号不用加)

② 将运算符移到对应的括号后面

③ 去掉所有括号,即为后缀表达式

原式:a+b*c+(d*e+f)*g

根据优先级加括号过程

a+b*c+(d*e)+f*g

a+b*c+((d*e)+f)*g

a+(b*c)+((d*e)+f)*g)

(a+(b*c))+((d*e)+f)*g)

((a+(b*c))+((d*e)+f)*g))


每组括号中的运算符移到括号右侧

((a+(b*c))+((d*e)+f)*g))

((a+(b*c))+((de)*+f)*g))

((a+(b*c))+((de)*f)+*g))

((a+(bc)*)+((de)*f)+g)*)

((a(bc)*)++((de)*f)+g)*)

((a(bc)*)+((de)*f)+g)*)+



(1) 后缀转中缀:利用栈

规则:①从左往右,遇到数就入栈,

②遇到操作符就出栈两个数(栈底元素 + 操作符 +栈顶元素 ),然后将两个数入栈。

【例题】将表达式24  8  +  3  *  4   10  7  -  *  /   转换为中缀表达式








7









10

10

10-7



8


3


4

4

4

4

4*(10-7)

24

24

(24+8)

(24+8)

(24+8)*3

(24+8)*3

(24+8)*3

(24+8)*3

(24+8)*3

(24+8)*3

遇到24

遇到8,①

遇到+,

遇到3,

遇到*,

遇到4,①

遇到10,

遇到7,①

遇到-,

遇到*,

 




(24+8)*3/(4*(10-7))

遇到/,②


后缀转中缀:括号法

过程:

从前往后,看到符号就把左侧的两个表达式加上括号,变成新的表达式。

24  8  +  3  *  4   10  7  -  *  /

(24 8 +) 3  *  4   10  7  -  *  /

((24 8 +) 3  * ) 4   10  7  -  *  /

((24 8 +) 3  * ) 4   (10  7  -)  *  /

((24 8 +) 3  * ) (4   (10  7  -)  *)  /

(((24 8 +) 3  * ) (4   (10  7  -)  *)  /)

将运算符加在括号内运算数中间:

(((24+8) 3  * ) (4   (10  7  -)  *)  /)

(((24+8) * 3   ) (4   (10  7  -)  *)  /)

(((24+8) * 3   ) (4   (10 - 7)  *)  /)

(((24+8) * 3   ) (4 * (10 - 7)  )  /)

(((24+8) * 3   ) / (4 * (10 - 7)  )  )

一层一层去掉括号,不影响原来的运算顺序

((24+8) * 3   ) / (4 * (10 - 7)  )

(24+8) * 3    / (4 * (10 - 7) )


(1) 前缀转中缀:利用栈

规则:①从右往左,遇到数就入栈,

②遇到操作符就出栈两个数(栈顶元素 + 操作符 +栈底元素 ),然后将表达式入栈。

【例题】将前缀表达式 -  *  + 3  4  5  6 转换成中缀表达式




3






4

4

3+4




5

5

5

5

(3+4)*5


6

6

6

6

6

6

(3+4)*5-6

遇到6,①

遇到5,①

遇到4,

遇到3,

遇到+,

遇到*,②

遇到-,

 

前缀转中缀:括号法

过程:

从右往左,看到符号就把右侧的两个表达式加上括号,变成新的表达式。

*  + 3  4  5  6

*  (+ 3 4)  5  6

(*(+ 3 4) 5)  6

(- (* ( + 3  4 ) 5 ) 6)  

将运算符加在括号内运算数中间:

(- (* ( 3 + 4 ) 5 ) 6)

(- ( ( 3 + 4 ) *5 ) 6)

(( ( 3 + 4 ) *5 ) -6)

一层一层去掉括号,不影响原来的运算顺序

(( ( 3 + 4 ) *5 ) -6)

( ( 3 + 4 ) *5 ) -6

( 3 + 4 ) *5  -6



(1) 中缀转前缀:利用栈

规则:①从右往左遇到操作数直接输出

②遇到操作符,放入栈中

③遇到右括号,入栈

④遇到左括号,出栈(直到遇到右括号,右括号只弹出不输出)

⑤遇到其他操作符,弹出所有优先级大于该运算符的栈顶元素,然后将该运算符入栈

⑥最终将栈中元素依次输出。

⑦最后将表达式反转。

【例题】将中缀表达式5+10*(2+6)-8转换成前缀表达式





+

+







)

)


*

*

+


-

-

-

-

-

-

-

-

-

遇到8,①

显示8

遇到-,②

显示8

遇到),

显示8

遇到6,

显示8 6

遇到+,

显示8 6

遇到2,①

8 6 2

遇到(,

显示8 6 2 +

遇到*,⑤

显示8 5 2+

遇到10

显示8 5 2 + 10

遇到+,⑤

显示8 6 2 + 10 *

 

+



-



遇到5,①

显示8 6 2 + 10 * 5

8 6 2 + 10 * 5 + -

- +5*10+2 6 8

 

中缀转前缀:括号法

根据运算优先级,加括号

5+10*(2+6)-8

5+(10*(2+6))-8

(5+(10*(2+6)))-8

((5+(10*(2+6)))-8)

运算符放到括号的前面

((5+(10*+(26)))-8)

((5+*(10+(26)))-8)

(+(5*(10+(26)))-8)

-(+(5*(10+(26)))8)

去掉括号

-+ 5* 10+2 6 8


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

NOIP2012年普及组初赛题目及答案分析

NOIP2012年普及组初赛题目及答案分析

一、单项选择题(共20题,每题1.5分,共计30分;每题且仅有一个正确选项)1.计算机如果缺少(A ),将无法正常启动。A.内存       ...

NOIP2009年普及组初赛题目及答案解析

NOIP2009年普及组初赛题目及答案解析

一、单项选择题(共20题,每题1.5分,共计30分。每题有且仅有一个正确答案。)1、 关于图灵机下面的说法哪个是正确的:( D)A.图灵机是世界上最早的电子计算机。B.由于大量使用磁带操作,图灵机运行...

信息学奥赛知识点(四)----计算机语言

信息学奥赛知识点(四)----计算机语言

程序是一系列的操作步骤,计算机程序就是由人事先规定的计算机完成某项工作的操作步骤,每一个步骤具体内容由计算机能够理解的指令来描述,这些指令告诉计算机“做什么”和“怎么做”  &nb...

NOIP2008年普及组初赛题目答案及解析

NOIP2008年普及组初赛题目答案及解析

一、 单项选择题 (共20题,每题1.5分,共计30分。每题有且仅有一个正确答案.)。1.微型计算机中,控制器的基本功能是(  A )。A. 控制机器各个部件协...

信息学奥赛知识点(十一)----逻辑运算

一、介绍逻辑运算又称布尔运算。布尔用数学方法研究逻辑问题,成功地建立了逻辑演算。他用等式表示判断,把推理看作等式的变换。这种变换的有效性不依赖人们对符号的解释,只依赖于符号的组合规律 。二、...

信息学奥赛知识点(十二)----栈和队列

信息学奥赛知识点(十二)----栈和队列

一、栈栈是只能在某一端插入和删除的特殊线性表。用桶堆积物品,先堆进行的压在底下,随后一件一件往上堆。取走时,只能从上面一件一件取。堆和取都在顶部进行。底部一般是不动的。栈就是一种类似桶堆积物品的数据结...