侧边栏壁纸
  • 累计撰写 192 篇文章
  • 累计创建 2 个标签
  • 累计收到 87 条评论

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

Allen Best
2023-08-09 / 0 评论 / 0 点赞 / 20 阅读 / 802 字
温馨提示:
本文最后更新于 2023-08-11,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
0.前言

上一篇我们主要介绍了二叉树的定义和相关规则,考试中有经常出现类似于“中缀表达式转后缀”,“前缀表达式转后缀”等。如果能画出唯一的二叉树那么便根据二叉树的结构之间求解即可,有些情况很难直接画出二叉树。还有通过加括号的方式进行求解,还有以下利用栈的这方法求表达式。

1.中缀转后缀

规则:

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

②遇到操作符,放入栈中

③遇到左括号,入栈

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

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

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

**例如:**a+bc+(de+f)*g

方法:画图或画表

读入字符栈内(底->顶)栈外说明
a(1)操作数,直接输出
++a(2)操作符,入栈
b+ab(3)操作数,直接输出
*+*ab(4)操作符,入栈(栈内没有优先级高于当前符合的)
c+*abc(5)操作数,直接输出
++abc*+(6)上面第⑤步
(+(abc*+(7)左括号,入栈
d+(abc*+d(8)操作数,直接输出
*+(*abc*+d(9)操作符,入栈
e+(*abc*+de(10)操作数,直接输出
++(+abc*+de*(11)上面第⑤步
f+(+abc*+de*f(12)操作数,直接输出
)+abc*+de*f+(13) 上面第④步
*+*abc*+de*f+(14)操作符,入栈(栈内没有优先级高于当前符合的)
g+*abc*+de*f+g(15)操作数,直接输出
abc*+def+g+(16) 上面第⑥步

img


img


img

2.中缀转后缀

规则:①从左往右,遇到数就入栈,遇到操作符就出栈

例如:24 8 + 3 * 4 10 7 – * /

方法1:画表

img

方法2:画二叉树 (例如: a b + c d e + * *)

img


img


3.前缀转中缀

跟后缀转中缀很类似

规则:从右往左,遇到数字就压栈,遇到操作符弹出栈顶两个元素,用运算符对他们相对它们做相应的计算,将结果入栈。重复上面过程。

例如:- × + 3 4 5 6

0

评论区