遍历

无序字母对 - C++

◇◆丶佛笑我妖孽 提交于 2020-01-31 20:26:29
无序字母对 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒)。请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现。 输入格式 第一行输入一个正整数n。 以下n行每行两个字母,表示这两个字母需要相邻。 输出格式 输出满足要求的字符串。 如果没有满足要求的字符串,请输出“No Solution”。 如果有多种方案,请输出前面的字母的ASCII编码尽可能小的(字典序最小)的方案 输入输出样例 输入 #1 4 aZ tZ Xt aX 输出 #1 XaZtX 这道题一开始就没什么思路,因为根本不会联想到图。但这是图的遍历里面出现的题,就觉得事情不简单。果不其然,这里涉及到一个叫欧拉路的问题,为此我特地去了解了一下欧拉路系列知识。其实理解也不难。 如果图G中的一个路径包括每个边恰好一次,则该路径称为欧拉路径(Euler path)。 如果一个回路是欧拉路径,则称为欧拉回路。 具有欧拉回路的图称为欧拉图(简称E图)。具有欧拉路径但不具有欧拉回路的图称为半欧拉图。 通俗点理解就是,你遍历一个图每条边只遍历一次便是欧拉路径。每条边只遍历两次便是欧拉回路。这里还涉及到一个奇点问题,度数为奇数的点。要形成欧拉回路,要么是0个奇点,要么是2个奇点。0个奇点便是一个连通图,必然是有欧拉路径,而2个奇点便是类似一条链,出点和终点度必须为1

原生JS数组操作的6个函数 arr.forEach arr.map arr.filter arr.some arr.every arr.findIndex

穿精又带淫゛_ 提交于 2020-01-31 10:32:24
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> </body> <script type="text/javascript"> var arr = [1,2,4,5,3] var arrObj = [{'id':1,'name':'xiaoxiao'},{'id':2,'name':'maomao'}] // arr.forEach()遍历数组 无返回值 arr.forEach(function(item,index,arr){ // console.log("index="+index,"item="+item) console.log(`当前遍历的元素索引是${index},值是${item}`) }) // arr.map()遍历并对每一个元素进行处理返回一个新数组 做批量处理用的 var mapResult = arr.map(function(item){ return item*10 }) console.log(mapResult) // arr.filter()过滤 遍历并检查每个元素 符合条件留下 不符合就过滤 返回新数组 var filterResult = arr.filter(function(item){ return item>2 })

数据结构 递归遍历二叉树 C/C++

断了今生、忘了曾经 提交于 2020-01-31 06:38:47
#include<stdio.h> #include<stdlib.h> typedef struct btnode { char data; struct btnode *lchild,*rchild; }btnode,*bitree; bitree Creatbintree() //前序遍历创建二叉树 { char ch; bitree bt; scanf("%c",&ch); if(ch=='#') bt=NULL; else { bt=(btnode*)malloc(sizeof(btnode)); bt->data=ch; bt->lchild=Creatbintree(); bt->rchild=Creatbintree(); } return bt; } void Preorder(bitree bt) //前序遍历 { if(bt==NULL) return; printf("%c ",bt->data); Preorder(bt->lchild); Preorder(bt->rchild); } void Inorder(bitree bt) //中序遍历 { if(bt==NULL) return; Preorder(bt->lchild); printf("%c ",bt->data); Preorder(bt->rchild); } void

数据结构 非递归遍历二叉树

一世执手 提交于 2020-01-31 04:59:35
#include<stdio.h> #include<stdlib.h> #define MAX 100 typedef struct { bitree ptr; int flag; }stacknode; typedef struct { stacknode elm[MAX]; int top; }sqstack; typedef struct btnode { char data; struct btnode *lchild,*rchild; }btnode,*bitree; bitree Creatbintree() //前序遍历创建二叉树 { char ch; bitree bt; scanf("%c",&ch); if(ch=='#') bt=NULL; else { bt=(btnode*)malloc(sizeof(btnode)); bt->data=ch; bt->lchild=Creatbintree(); bt->rchild=Creatbintree(); } return bt; } typedef struct { bitree data[MAX]; int top; }seqstack; seqstack *Init_seqstack() { seqstack *s; s=malloc(sizeof(seqstack)); if(s) s->top=

LeetCode 207 Course Schedule(基于DFS)

南笙酒味 提交于 2020-01-31 04:28:18
题目链接: 点击这里 思路: 用 f l a g [ ] flag[\ ] f l a g [ ] 标记每一个节点的状态, 0 0 0 表示没有访问过, 1 1 1 表示当前的dfs正在访问, − 1 -1 − 1 表示已经访问完毕。 对所有的节点进行遍历。比如遍历节点 a a a 的时候,遍历前,先将该节点 a a a 的 f l a g flag f l a g 设置为 1 1 1 ,表示正在遍历,然后,对 a a a 的邻接表进行遍历: 如果下一级节点 b b b 的 f l a g flag f l a g 为 − 1 -1 − 1 ,说明已经遍历了,返回 t u r e ture t u r e ; 如果为 1 1 1 ,说明重复遍历了当前的节点,这个时候存在环,返回 f a l s e false f a l s e ; 如果为 0 0 0 ,则继续遍历该节点b的邻接表节点。 class Solution { public : bool dfs ( int v , vector < vector < int >> & graph , vector < int > & flag ) { if ( flag [ v ] == 1 ) return false ; if ( flag [ v ] == - 1 ) return true ; flag [ v ] = 1 ;

Map集合的遍历方式

北城以北 提交于 2020-01-31 04:20:18
1.通过Map.keySet遍历key和value map.keySet()返回的是所有key的值 map.get(in)得到每个key对应value的值 2.通过Map.keySet使用iterator遍历key和value 方法同上 3.通过Map.entrySet遍历key和value map.entrySet() 返回此映射中包含的映射关系的 Set视图。 4.通过Map.entrySet使用iterator遍历key和value 方法同上 import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class MapTest { public static void main(String[] args) { MapBianli1(); MapBianli2(); MapBianli3(); MapBianli4(); } /** * 获取keySet,得到一个个的key * map.get()获取key所对应的value * */ public static void MapBianli1(){ Map<String,String> map = new HashMap<String, String>(); map.put(

数据结构入门(三)栈的应用

别来无恙 提交于 2020-01-31 03:40:02
  在之前的两篇文章—— 数据结构入门(一)栈的实现 和 数据结构入门(二)栈的应用之数学表达式求值 中,笔者分别介绍了“栈”这个数据结构在数的进制转换和数学表达式求值方面的应用。在本文中,笔者将会再介绍栈的四个应用,它们分别是: 判断字符串是否回文 括号匹配 行编辑程序 二叉树的深度优先遍历   栈的结构实现可以参考 数据结构入门(二)栈的应用之数学表达式求值 ,本文将不再具体给出。 判断字符串是否回文   所谓回文字符串就是指正读反读均相同的字符序列,如“12321”、“aha”、“ahaha”、“清水池里池水清”均是回文,但“ahah”不是回文。通过栈这个数据结构我们将很容易判断一个字符串是否为回文。   首先我们需要找到该字符串的中心点。对于长度为奇数的字符串,中心点就是中间的那个元素;对于长度为偶数的字符串,中心点恰好位于长度为一半的那个元素及其后一个元素的中间。接着将中心点前面的字符依次入栈,然后将当前栈中的字符依次出栈,看看是否能与 中心点之后的字符一一匹配,如果都能匹配则说明这个字符串是回文字符串,否则就不是回文字符串。   以下是利用栈来实现判断字符串是否回文的Python代码: # -*- coding: utf-8 -*- # using Stack to check if a string is plalindrome from Stack import

NowCoder 二叉搜索树的后序遍历序列 递归

拈花ヽ惹草 提交于 2020-01-31 03:03:42
题意:给一串序列,判断该序列是否某二叉树的后序遍历序列 思路:后序遍历最后一个节点为根节点,前面的都可以分成连续的两部分,一部分比根节点小,另一部分比根节点大,依次分块递归判断两部分是否连续即可 public class Solution { public boolean VerifySquenceOfBST ( int [ ] sequence ) { if ( sequence == null || sequence . length == 0 ) return false ; return solve ( sequence , 0 , sequence . length - 1 ) ; } public boolean solve ( int [ ] a , int l , int r ) { if ( l >= r ) return true ; int i = l , root = a [ r ] , mid ; for ( ; i < r ; i ++ ) { if ( a [ i ] > root ) break ; } mid = i ; for ( ; i < r ; i ++ ) { if ( a [ i ] < root ) return false ; } return solve ( a , l , mid - 1 ) && solve ( a , mid

迭代器 Iteraotr

江枫思渺然 提交于 2020-01-31 00:31:59
概述 所有集合类均未提供相应的遍历方法,而是把把遍历交给迭代器完成。迭代器为集 合而生,专门实现集合遍历 Iterator是迭代器设计模式的具体实现 Iterator方法 boolean hasNext(): 判断是否存在另一个可访问的元素 Object next(): 返回要访问的下一个元素 void remove(): 删除上次访问返回的对象。 遍历的本质 实现 Iterable 接口 For-each 循环 优点 增强的for循环,遍历array 或 Collection的时候相当简便 无需获得集合和数组长度,无需使用索引访问元素,无需循环条件 遍历集合时底层调用Iterator完成操作 数组: 不能方便的访问下标值 不要在for-each中尝试对变量赋值,只是一个临时变量 集合: 与使用Iterator相比,不能方便的删除集合中的内容 缺点 遍历集合用法 遍历 List List list = new ArrayList<>(); list.add("de"); list.add("dddd"); list.add("dfjiow"); list.add("pp"); Iterator<String> iterator = list.iterator(); while(iterator.hasNext()) {//判断是否有下一个 String o =iterator

根据二叉树前序输出中序

夙愿已清 提交于 2020-01-31 00:08:17
题目描述 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。 输入 输入包括1行字符串,长度不超过100。 输出 可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。 每个输出结果占一行。 样例输入 a#b#cdef##### a## 样例输出 a b f e d c a 代码 # include <bits/stdc++.h> using namespace std ; string s ; int i ; struct node { char a ; node * lchild ; node * rchild ; } ; node * creat ( ) { char c ; c = s [ i ++ ] ; node * root = NULL ; if ( c == '#' ) return NULL ; root = new node ; root - > a = c ; root - > lchild = creat ( ) ; root - > rchild = creat ( ) ; return root ;