news 2026/4/15 3:45:51

UVa 122 Trees on the Level

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UVa 122 Trees on the Level

题目分析

本题要求根据给定的节点描述序列,构建二叉树,并输出该树的层序遍历Level-order Traversal\texttt{Level-order Traversal}Level-order Traversal)。每个节点由一个正整数和一个路径字符串表示,路径字符串由LR组成,分别表示向左和向右走。例如,(13, RL)表示从根节点开始,先向右再向左到达的节点值为 13。空字符串()表示一棵树的输入结束。

如果一棵树是完全指定completely specified\texttt{completely specified}completely specified)的,即每个节点都被赋予一个值且仅被赋予一次,则输出其层序遍历结果;否则输出not complete。题目保证每棵树节点数不超过256256256

输入说明

  • 每棵树由若干(值, 路径)对组成,以()结尾。
  • 输入可能有多棵树,以EOF\texttt{EOF}EOF结束。

输出说明

  • 对于每棵完全指定的树,按层序输出节点值,值之间用空格分隔。
  • 否则输出not complete

解题思路

我们可以将问题拆解为以下步骤:

  1. 建树与存储
    使用动态创建节点的方式构建二叉树。每个节点包含左子节点、右子节点和节点值(初始为 0 表示未赋值)。
    根据路径字符串从根节点开始遍历,若某子节点不存在则创建,最后将值赋给该节点。若该节点已被赋值,则标记为重复赋值(设为000,表示无效)。

  2. 检查完全性
    对树进行深度优先遍历(DFS\texttt{DFS}DFS),若存在节点值为000(未赋值或重复赋值),则树不完全。

  3. 层序遍历输出
    若树完全,则进行层序遍历。
    这里采用DFS\texttt{DFS}DFS配合深度数组cache[depth][...]记录每一层的节点值,最后按深度从小到大输出。

  4. 内存管理
    每处理完一棵树后,递归释放所有节点内存,准备下一棵树。


算法复杂度

  • 时间复杂度:O(N)O(N)O(N),其中NNN为节点数,每个节点只被访问常数次。
  • 空间复杂度:O(N)O(N)O(N),用于存储树结构和缓存输出。

代码实现

// Trees on the Level// UVa ID: 122// Verdict: Accepted// Submission Date: 2011-12-25// UVa Run Time: 0.008s//// 版权所有(C)2011,邱秋。metaphysis # yeah dot net//// [解题方法]// 本题可以归结为数据结构问题。步骤是建立树结构,检查是否完整,若完整则按深度输出节点。#include<bits/stdc++.h>usingnamespacestd;#defineTAG0#defineMAXN256structnode{structnode*parent;structnode*childLeft,*childRight;intvalue;};boolnoComplete,printWhitespace;intcache[MAXN][MAXN];intcnt[MAXN];voidcheckComplete(node*current){if(current->value==TAG)noComplete=true;if(current->childLeft!=NULL)checkComplete(current->childLeft);if(current->childRight!=NULL)checkComplete(current->childRight);}// 遍历树,检查叶子节点保存的路径和是否为目标值。voidtravelTree(node*current,intdepth){cache[depth][cnt[depth]++]=current->value;if(current->childLeft!=NULL)travelTree(current->childLeft,depth+1);if(current->childRight!=NULL)travelTree(current->childRight,depth+1);}voidclearTree(node*current){if(current->childLeft!=NULL)clearTree(current->childLeft);if(current->childRight!=NULL)clearTree(current->childRight);deletecurrent;}intmain(intargc,charconst*argv[]){charc;node*root=newnode;root->childLeft=NULL;root->childRight=NULL;root->value=TAG;while(cin>>c){if(c==' ')continue;if(c=='('){string pairs;while(cin>>c,c!=')')pairs+=c;if(pairs.length()){istringstreamiss(pairs);intnumber;string positions;iss>>number>>c>>positions;node*current=root;for(inti=0;i<positions.length();i++){if(positions[i]=='L'){if(current->childLeft==NULL){node*temp=newnode;temp->value=TAG;temp->childLeft=NULL;temp->childRight=NULL;current->childLeft=temp;}current=current->childLeft;}else{if(current->childRight==NULL){node*temp=newnode;temp->value=TAG;temp->childLeft=NULL;temp->childRight=NULL;current->childRight=temp;}current=current->childRight;}}if(current->value>0)current->value=TAG;elsecurrent->value=number;}else{noComplete=false;checkComplete(root);if(noComplete)cout<<"not complete\n";else{memset(cnt,0,sizeof(cnt));travelTree(root,0);printWhitespace=false;for(inti=0;i<MAXN;i++)for(intj=0;j<cnt[i];j++){if(printWhitespace)cout<<" ";elseprintWhitespace=true;cout<<cache[i][j];}cout<<endl;}clearTree(root);root=newnode;root->childLeft=NULL;root->childRight=NULL;root->value=TAG;}}}return0;}

示例运行

输入:

(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

总结

本题的关键在于正确解析输入、动态建树、检查节点赋值完整性以及按层序输出。代码采用递归方式实现树的遍历与清理,逻辑清晰,适合用作二叉树基本操作的练习。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 1:40:50

OpenVINO™ AI插件终极指南:打造智能音频处理工作流

OpenVINO™ AI插件终极指南&#xff1a;打造智能音频处理工作流 【免费下载链接】openvino-plugins-ai-audacity A set of AI-enabled effects, generators, and analyzers for Audacity. 项目地址: https://gitcode.com/gh_mirrors/op/openvino-plugins-ai-audacity 还…

作者头像 李华
网站建设 2026/4/10 13:14:32

BiliBili-UWP第三方客户端:Windows平台上的B站观影新体验

BiliBili-UWP第三方客户端&#xff1a;Windows平台上的B站观影新体验 【免费下载链接】BiliBili-UWP BiliBili的UWP客户端&#xff0c;当然&#xff0c;是第三方的了 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBili-UWP BiliBili-UWP是一款专为Windows 10/11系统…

作者头像 李华
网站建设 2026/4/11 10:25:23

Chartero终极指南:5分钟让Zotero文献管理可视化起飞

Chartero终极指南&#xff1a;5分钟让Zotero文献管理可视化起飞 【免费下载链接】Chartero Chart in Zotero 项目地址: https://gitcode.com/gh_mirrors/ch/Chartero 还在为海量文献头疼&#xff1f;每天面对成堆的PDF文档&#xff0c;却无法直观了解自己的阅读进度和效…

作者头像 李华
网站建设 2026/4/9 21:28:04

开源许可证解读:Z-Image-Turbo可商用吗?

开源许可证解读&#xff1a;Z-Image-Turbo可商用吗&#xff1f; 阿里通义Z-Image-Turbo WebUI图像快速生成模型 二次开发构建by科哥 核心结论先行&#xff1a;Z-Image-Turbo 基于 Apache 2.0 许可证发布&#xff0c;允许商业用途、修改与分发&#xff0c;但需保留原始版权声明…

作者头像 李华
网站建设 2026/4/14 16:13:04

边缘计算实践:轻量级中文识别模型的快速部署

边缘计算实践&#xff1a;轻量级中文识别模型的快速部署 在嵌入式设备上部署中文物体识别功能时&#xff0c;工程师常常面临计算资源有限、内存占用过高和模型准确率难以平衡的挑战。本文将介绍如何利用预置的轻量级中文识别模型镜像&#xff0c;快速在边缘设备上部署高效的物体…

作者头像 李华
网站建设 2026/4/5 5:39:13

智能零售解决方案:30分钟搭建商品识别演示系统

智能零售解决方案&#xff1a;30分钟搭建商品识别演示系统 在零售科技领域&#xff0c;快速搭建商品识别演示系统是销售团队向客户展示自动货架盘点方案的关键。本文将介绍如何利用预置镜像&#xff0c;在30分钟内完成一个商品识别演示系统的搭建&#xff0c;即使你技术资源有限…

作者头像 李华