网站大量收购独家精品文档,联系QQ:2885784924

Chapter-02-数据结构和STL.ppt

  1. 1、本文档共75页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Chapter-02-数据结构和STL

2.14 ZOJ1167-TREES ON THE LEVEL 在本题中,二叉树是由一组数据对(n, s)来表示,其中n表示结点的值,s是一个字符串,表示从根结点到达此结点的路径。 路径由一组R和L表示,其中L表示左分支,R表示右分支。在图中,值为13的结点表示为(13,RL),值为2的结点表示为(2,LLR),而根结点表示为(5,),其中空字符串表示该结点是根。 如果二叉树的每个结点,从根到结点的路径描述有而且只有一个,则认为该二叉树是完整的。 * 输入样例 (11,LL) (7,LLL) (8,R) (5,) (4,L) (13,RL) (2,LLR) (1,RRR) (4,RR) () (3,L) (4,R) () 输出样例 5 4 8 11 13 4 7 2 1 not complete 2.14 ZOJ1167-TREES ON THE LEVEL 二叉树是数据结构中的基础知识,其遍历方法有前树遍历,中树遍历和后树遍历等。本题中的二叉树,是要我们自己构造的,然后再按层遍历。由于构造二叉树的方法不同,编程的方法就各不相同,在网站上能搜索到各种各样的代码。这里采用哈希(Hash)映射的方法,将二叉树映射为一维数组。 从图中看出,除叶子结点之外的任意结点p,其左孩子结点的编号是2p,右孩子结点的编号是2p+1。在输入数据中,刚好给出了结点的完整路径,当路径中有L时,就是左孩子结点;路径中有R时,就是右孩子结点。 * 2.14 ZOJ1167-TREES ON THE LEVEL 图中有一个明显的特征,其结点编号刚好是按层遍历的。因此,就能够把完全二叉树映射到一维数组中。对一般的二叉树,有些结点是没有的。 对样例数据1,二叉树映射为一维数组后,其值如表所示。 二叉树输出时,只需遍历数组,输出非零元素的值。 * 结点编号 (数组下标) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 结点数据 5 4 8 11 0 13 4 7 2 0 0 0 0 0 1 调用该算法时,complete的初值为1。 int data; //结点数据 int p; //结点编号 * 算法2.17 二叉树的构建和遍历 输入样例 (11,LL) (7,LLL) (8,R) (5,) (4,L) (13,RL) (2,LLR) (1,RRR) (4,RR) () (3,L) (4,R) () 输出样例 5 4 8 11 13 4 7 2 1 not complete 2.15 ZOJ1016- PARENCODINGS 令 是一个符合规范的括号字符串。可以采用两种方式对S编码: 一个整数序列 ,其中 是字符串S中,第i个右括号前左括号的个数(记为P序列)。 一个整数序列 ,其中 是字符串S中,第i个右括号往左数遇到和它相匹配的左括号时经过的左括号个数(记为W序列)。 编码示例: S(((()()()))) P-sequence 4 5 6 6 6 6 W-sequence 1 1 1 4 5 6 编程任务,对于一个符合规范的括号 字符串,将其P序列转化为W序列。 * 输入样例 2 6 4 5 6 6 6 6 9 4 6 6 6 6 8 9 9 9 输出样例 1 1 1 4 5 6 1 1 2 4 5 1 1 3 9 2.15 ZOJ1016- PARENCODINGS 使用堆栈操作能够很好地将P序列转换为W序列。 (1)数据结构 使用C++的标准模板库stack()容器: stackint S; 使用“﹣1”表示左括号。 * P序列 W序列 输出Wi之后,堆栈的内容 4 1 -1,-1,-1,1 5 1 -1,-1,-1,1,1 6 1 -1,-1,-1,1,1,1 6 4 -1,-1,4 6 5 -1,5 6 6 6 输入样例 6 4 5 6 6 6 6 输出样例 1 1 1 4 5 6 S(((()()()))) 2.15 ZOJ1016- PARENCODINGS (2)堆栈操作 并不是构造好字符串S并存放到堆栈中,才计算W序列,而是一边读取P序列一边计算W序列。 (a) 令变量t保存P序列中当前元素p的前序,初值为0。 显然左括号的个数为p﹣t,全部入栈。 当p处理完毕时,令t=p,保存当前元素。 (b) 计算W序列的元素 如果栈顶元素为“﹣1”,表示前面就是一个左括号,应输出“1”。同时将“1”入栈,表示有一对括号。否则,表示栈顶有S.top()对括号,逐一弹出并累计有多少对括号,一直遇到左括号(即“﹣1”),然后加上1输出。并将该值入栈,记下到此为止有多少成对的括号。 * P序列 W序列 输出Wi之后,

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档