页数:93页文件大小:354.2 KB来源: 数据结构ppt课件
本课件讨论树和森林的相关知识,给出树的顺序存储与多种链接存储表示,介绍树、森林与二叉树之间的相互转换方法,讲解树和森林的先根、后根与层次遍历,并进一步介绍扩充二叉树、哈夫曼树与哈夫曼编码的构造,以及表达式树在表达式求值中的应用。
练习:构造后缀表达式ab+cde+*-f-gh+*对应的二叉树
842、后缀表达式求值的方法:若已知后缀表达式,从左到右读入后缀表达式的各个符号,①若读到的是操作数,将它压入堆栈。②若读到的是运算符,就从栈中连续弹出两个元素,进行相应的运算,并将结果压入栈。③读入结束符时,栈顶元素就是计算结果。
在表达式树的基础上,通过后根遍历,可以计算表达式的值:当访问一个叶结点时,把对应的值压入堆栈中;当访问一个非叶结点时,从堆栈中连续弹出两个值,按此结点规定的操作进行运算,并且结果压回到堆栈中;当遍历终止时,堆栈中只有一个值,它就是表达式的值。
算法GetValue(t.value)GetValue1. [创建辅助堆栈,根指针入栈]IFt= THEN RETURN.CREATE (S).CREATE (calculator).S←(t, 0) .
GetValue2.[后根遍历二叉树,并计算表达式值]WHILES非空DO((t,i)←SIFi=0THEN(S←(t,1).IFLeft(t)≠ THENS←(Left(t),0)).)IFi=1THEN(S←(t,2).IFRight(t)≠ THENS←(Right(t),0)).)IFi=2THEN(IFLeft(t)= ANDRight(t)= THENcaculator←Data(t).ELSE(operand2←caculator.operand1←caculator.op←Data(t).IFop="+"THEN(result←operand1+operand2.)IFop="−"THEN(result←operand1−operand2.)IFop="×"THEN(result←operand1×operand2.)IFop=""THENIFoperand2≠0THENresult←operand1operand2.caculator←result.)))
GetValue3. [为value变量赋值]value←caculator.▐
903、中缀表达式转换成后缀表达式设定一个堆栈,用来保存扫描中缀表达式得到的暂不能放入后缀表达式中的符号。基本思想:从左到右依次读中缀表达式的各个符号,并根据如下规则进行处理:1.假如是操作数,将其放入后缀表达式中;2.如果是运算符,则:(1)栈空或栈顶不是运算符:运算符入栈(2)栈顶为运算符:比较当前读到的运算符与栈顶运算符的优先级
911)若读出的运算符的优先级大于栈顶运算符的优先级,则将其压入运算符栈;2)若读出的运算符的优先级小于等于栈顶运算符的优先级,弹出栈顶运算符放入后缀表达式中,返回2继续比较;3.遇到“(”,压入堆栈;4.遇到“)”,把“(”上面的运算符依次弹出加到后缀表达式中,“(”出栈;5.如果读出的是表达式结束符“#”,栈中剩余的运算符依次出栈,并写到后缀表达式中,转换完成。
92(A+B)*((C-D)*E+F)栈输出序列(A(+A BA B+*(( A B+C*((-A B+CD*( A B+CD-*(* A B+CD-E*(+A B+CD-E**(+A B+CD-E*F* A B+CD-E*F+A B+CD-E*F+ *
课后作业130页4-10、4-12
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}