选择题
数据结构部分
- P190 T2 做对,难点难题,总结
考点:中缀转后缀的机器计算过程
当时这题没有用完整的计算来做,只做到了最多的括号在栈中,就选了
完整的流程如下:
中缀表达式转换后缀表达式过程:
①从左往右扫描中缀表达式,如果遇到操作数,则直接输出到表达式队列中
②如果遇到操作符,则把栈中优先级大于等于当前遇到的操作符的操作符依次弹出,遇到’(’,或者栈为空则停止弹出,再把该当前遇到的操作符入栈
③如果遇到’)‘界限符,则把栈中的运算符依次弹出,直到把’(‘左括号弹出为止。注意的是’)'右括号是不会入栈的,只用作代码的出栈判断符
④处理完所有的字符后,把运算符栈中的运算符依次弹出加入到表达式队列中
类似题目有:
空闲的时候我查了中缀转前缀的机算过程,过于复杂,嗯嗯!
- P190 T3 做对,这题的结论在2011年真题 T5的时候有说过
给出前序和后序序列,虽然不能确定一颗二叉树,那么我们知道存在即是合理,肯定有它存在的意义,从前序和后序序列中,我们可以确定的是每两个点之间的关系–是祖先关系
如:这题中
通过先序序列a的位置和后序序列a的位置可以得出,a是b,c,d,e的祖先
因为后序遍历是最后才访问根的
而在通过其前序遍历的第二个结点e,通过在后序遍历中的e位置可得,e是b,c,d的祖先,那么这题就完成了,因为a,b,c,d,e都已经划分完集合,那么只要e直接和a根节点相连。
总结得到----太阳学长的肯定–善于思考
举一反三系列,对这道题进行加强:这道题的根节点只有一个孩子,我对这道题进行了加强,对根节点再加一个孩子。那么通过前序和后序遍历的序列怎么判断出来3和5是1的孩子,2和7是3的孩子,10是5的孩子呢?
前序序列:1,3,2,7,5,10
后序序列:2,7,3,10,5,1
通过前序序列第一个访问的元素来判断每一颗子树的祖先。
在前序序列中第一个访问的元素是1,那么通过后序遍历序列1的位置可以得到1是2,7,3,10,5的祖先。
在先序序列中第二个访问的元素是3,那么通过后序遍历序列3的位置可以得到3是2,7的祖先。
而因为3的子树已划定了范围了就是后序遍历3之前的序列,那么就在前序序列中跳过这些元素2和7都不是直接和1相连的,而前序序列是先访问根的,访问完3的子树,那么必定会访问1的右子树,且先访问自己的孩子,那么在前序序列中3的子树集合的下一个访问的元素就是根节点1的孩子。因此5就是根节点1的孩子,那么在后序遍历中找5所在的位置,就可以确定以根节点为5的元素集合了,划分时不包括已经划分集合的元素,如2和7已经划分到了3为根节点的子树中了,那么在后序遍历中5是10的祖先了。
到此就可以确定
①1的左右孩子了:1的直接相连的孩子左右孩子为3和5。
②3的孩子为2和7
③5的孩子为10