Tree on the level UVa122
很单纯的树的遍历,但是输入和方向好麻烦!!
下面给出代码,题目来自UVa 122
#include<cstdio> #include<cstring> #include<vector> #include<cstdlib> #include<queue> using namespace std; + ; struct Node{ bool have_value; int v; Node *right,*left; Node():have_value(false),right(NULL),left(NULL){} }; Node *root; Node* newnode(){return new Node();} void remove_tree(Node* u){ //防止内存泄露。 但可能会出现内存碎片 if(u == NULL)return; remove_tree(u->left); remove_tree(u->right); delete u; } char s[maxn]; bool failed; void addnode(int v,char *s){ int len = strlen(s); Node* u = root; ; i < len;i++){ if(s[i] == 'L'){ if(u->left == NULL)u->left = newnode(); u = u->left; } else if(s[i] == 'R'){ if(u->right == NULL)u->right = newnode(); u = u->right; } } if(u->have_value)failed = true; u->v = v; u->have_value = true;// 标记!! } bool read_input(){ failed = false; remove_tree(root); root = newnode(); for(;;){ ) return false; if(!strcmp(s,"()"))break; //记住!!strcmp函数中的第二个参数是字符串!! int v; sscanf(&s[],"%d", &v); //&s[1]所对应的字符串是从s[1]后的字符串 addnode(v,strchr(s,); //函数strchr(s,',')返回字符串s中从左往右第一个字符","的指针 } return true; } bool bfs(vector<int>& ans){ //bfs遍历树 queue<Node*> q; ans.clear(); q.push(root); while(!q.empty()){ Node* u = q.front();q.pop(); if(!u->have_value)return false; //判断是否输入错误 ans.push_back(u->v); if(u->left != NULL)q.push(u->left); if(u->right != NULL)q.push(u->right); } return true; } int main(){ freopen("tree.txt","r",stdin); freopen("treeout.txt","w",stdout); vector<int> ans; while(read_input()){ ; // 参数!! if(failed)printf("-1\n"); else{ ; i < ans.size();i++){ if(i)printf(" "); printf("%d", ans[i]); } printf("\n"); } } ; }
Tree on the level UVa122的更多相关文章
- [Algorithm] Tree Width with Level Width
// --- Directions // Given the root node of a tree, return // an array where each element is the wid ...
- 内存池技术(UVa 122 Tree on the level)
内存池技术就是创建一个内存池,内存池中保存着可以使用的内存,可以使用数组的形式实现,然后创建一个空闲列表,开始时将内存池中所有内存放入空闲列表中,表示空闲列表中所有内存都可以使用,当不需要某一内存时, ...
- Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level). For example: Given binary tree {3,9,20,#,#,15,7}, 3 / \ 9 20 / \
class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vect ...
- 例题6-7 Trees on the level ,Uva122
本题考查点有以下几个: 对数据输入的熟练掌握 二叉树的建立 二叉树的宽度优先遍历 首先,特别提一下第一点,整个题目有相当一部分耗时在了第一个考查点上(虽然有些不必要,因为本应该有更简单的方法).这道题 ...
- [LeetCode] Binary Tree Level Order Traversal 二叉树层序遍历
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- [Leetcode][JAVA] Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- leetcode 102. Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- 【leetcode】Binary Tree Level Order Traversal I & II
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- LeetCode之Binary Tree Level Order Traversal 层序遍历二叉树
Binary Tree Level Order Traversal 题目描述: Given a binary tree, return the level order traversal of its ...
随机推荐
- IOS开发-OC学习-NSTimer的使用
上一篇博客中在改变属性值的时候使用了timer进行自动改变.关于NSTimer的更详细的用法如下: 定义一个NSTimer类型的timer,和一个count,其中timer是定时器,count是计数的 ...
- partial类修饰符
partial是一个类修饰符,用于把类定义拆分为几个部分,便于代码管理,如class ClassA{void A(){;}void B(){;}}与partial class ClassA{void ...
- 一句话绑定父函数的作用域this
//如何在返回的函数中绑定父函数的作用域this function bound () { return function () { console.log(this); }.bind(this); } ...
- CSS文字大小单位PX、EM、PT
老是被人问到px.pt和em的区别,自己有时候也会纠结到底该用什么单位,今天特意查了一些文章,下面这篇虽然很久远了,但解释的比较全面,转载收藏之.点击查看原文 这里引用的是Jorux的"95 ...
- Android性能优化(一)之启动加速35%
一.前言 随着项目版本的迭代,App的性能问题会逐渐暴露出来,而好的用户体验与性能表现紧密相关,从本篇文章开始,我将开启一个Android应用性能优化的专题,从理论到实战,从入门到深挖,手把手将性能优 ...
- 让php Session 存入 redis 配置方法
首先要做的就是安装redis 安装方法:http://redis.io/download Installation Download, extract and compile Redis with: ...
- 【中国人大:天地人大BBS站】迟到的求职感悟
转自 http://i.cnblogs.com/EditPosts.aspx?opt=1 研究生最后一年,我参加了一个500强外企实习,单纯幼稚的小姑娘立马被白领工作的那种光鲜亮丽给迷惑了,同时听说可 ...
- cygwin下配置alias
主要是cygwin下的盘符映射关系容易忘,直接用mount命令: 所以,找到E:\cygwin64\home\Administrator下面的.bashrc,添加alias.如下:
- Java中多线程原理详解
Java是少数的集中支持多线程的语言之一,大多数的语言智能运行单独的一个程序块,无法同时运行不同的多个程序块,Java的多线程机制弥补了这个缺憾,它可以让不同的程序块一起运行,这样可以让程序运行更加顺 ...
- 利用谷歌开源工具cAdvisor 结合influxdb存储+Grafana前端展示进行Docker容器的监控
一.Docker 监控方式 1.利用docker 的 docker stats API 命令: docker stats [容器ID/容器名称] [root@docker ~]# docker sta ...