news 2026/4/23 17:16:47

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/23 10:44:00

地址标准化革命:基于MGeo和云端GPU的一站式方案

地址标准化革命&#xff1a;基于MGeo和云端GPU的一站式方案 电商平台每天处理大量订单&#xff0c;地址错误导致的退货问题让技术负责人头疼不已。传统采购服务器流程缓慢&#xff0c;而基于MGeo大模型的智能地址校验系统可以快速部署&#xff0c;显著提升地址识别准确率。本文…

作者头像 李华
网站建设 2026/4/23 5:04:37

跨平台识别系统构建:云端GPU统一开发环境

跨平台识别系统构建&#xff1a;云端GPU统一开发环境实战指南 在开发跨平台识别应用时&#xff0c;最头疼的问题莫过于不同设备上的识别效果不一致。本文将介绍如何利用云端GPU统一开发环境镜像&#xff0c;快速构建标准化的视觉识别系统&#xff0c;确保你的AI模型在任何设备上…

作者头像 李华
网站建设 2026/4/23 12:50:55

万物识别模型集成:投票融合的云端实现技巧

万物识别模型集成&#xff1a;投票融合的云端实现技巧 在计算机视觉领域&#xff0c;物体识别是一个基础但至关重要的任务。随着深度学习的发展&#xff0c;各种优秀的物体识别模型层出不穷&#xff0c;如YOLO、Faster R-CNN、EfficientDet等。但实际应用中&#xff0c;单一模型…

作者头像 李华
网站建设 2026/4/23 12:27:02

终极Windows自动点击解决方案:AutoClicker完整使用手册

终极Windows自动点击解决方案&#xff1a;AutoClicker完整使用手册 【免费下载链接】AutoClicker AutoClicker is a useful simple tool for automating mouse clicks. 项目地址: https://gitcode.com/gh_mirrors/au/AutoClicker 你是否厌倦了在电脑前重复执行相同的鼠标…

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

AI识别黑客松必备:极速搭建比赛开发环境

AI识别黑客松必备&#xff1a;极速搭建比赛开发环境 参加编程马拉松&#xff08;Hackathon&#xff09;时&#xff0c;时间就是一切。作为参赛团队&#xff0c;如何在有限时间内快速搭建一个高效的AI识别应用开发环境&#xff1f;本文将介绍如何利用预置镜像快速搭建比赛开发环…

作者头像 李华
网站建设 2026/4/23 13:38:01

AI内容生产新趋势:自动化图像生成+多平台分发集成

AI内容生产新趋势&#xff1a;自动化图像生成多平台分发集成 阿里通义Z-Image-Turbo WebUI图像快速生成模型 二次开发构建by科哥 在AI内容创作领域&#xff0c;效率与一致性正成为企业级内容生产的两大核心诉求。传统的人工设计流程已难以满足短视频、社交媒体、电商广告等高频…

作者头像 李华