遍历

leetcode102. 二叉树的层次遍历

与世无争的帅哥 提交于 2020-01-14 02:55:02
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。 例如: 给定二叉树: [3,9,20,null,null,15,7], 返回其层次遍历结果: [ [3], [9,20], [15,7] ] 思路: 相比普通层次遍历,此题需要用二维列表输出结果。只需增加一个计数器保存每层结点的数量,每层遍历时,从队列中吐出相应数量的结点,加入列表中,再将此列表加入结果列表末尾。 class Solution : def levelOrder ( self , root : TreeNode ) - > List [ List [ int ] ] : p = root q = [ ] res = [ ] if p : q . append ( p ) tmp = [ ] tmp . append ( p . val ) res . append ( tmp ) n = 1 else : return [ ] while ( q ) : tmp = [ ] count = 0 for i in range ( n ) : p = q . pop ( 0 ) if p . left : q . append ( p . left ) tmp . append ( p . left . val ) count += 1 if p . right : q . append (

Python遍历文件、遍历文件夹的示例

百般思念 提交于 2020-01-14 01:14:24
代码摘自: http://www.512pic.com/181/2151-0.html #!/usr/bin/python # -*- coding: utf-8 -*- import sys import os import shutil dir = "/mnt/Packages" class Packages: def __init__(self,srcdir,desdir): self.sdir=srcdir self.ddir=desdir def check(self): print('program start...') for dirpath, dirnames, filenames in os.walk(self.sdir): #遍历文件 for filename in filenames: thefile=os.path.join(dirpath,filename) #文件的绝对地址 try: if os.path.splitext(thefile)[1]=='.rpm': #筛选.rpm格式的文件 #print('Fount rpm package: ' + thefile) if 'inspuer' in os.popen('rpm -qpi ' + thefile).read().rstrip(): print('Found error package: '

二叉树的后序遍历

假如想象 提交于 2020-01-14 00:55:07
如下图表示一颗二叉树,对它进行先序遍历操作,采用两种方法,递归和非递归操作。。 遍历结果为:4526731。。 1、递归操作: 思想:若二叉树为空,返回。否则 1)后序遍历右子树;2)后序遍历左子树;3)遍历根节点 代码: void PostOrder(BiTree root) { if(root==NULL) return ; PostOrder(root->lchild); //递归调用,后序遍历左子树 PostOrder(root->rchild); //递归调用,后序遍历右子树 printf("%c ", root->data); //输出数据 } 2、非递归操作 代码: void PostOrder_Nonrecursive(BiTree T) // 后序遍历的非递归 { stack<BiTree> S; BiTree curr = T ; // 指向当前要检查的节点 BiTree previsited = NULL; // 指向前一个被访问的节点 while(curr != NULL || !S.empty()) // 栈空时结束 { while(curr != NULL) // 一直向左走直到为空 { S.push(curr); curr = curr->lchild; } curr = S.top(); // 当前节点的右孩子如果为空或者已经被访问,则访问当前节点

Head First设计模式之目录

ぐ巨炮叔叔 提交于 2020-01-14 00:52:56
一、定义 提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示; 主要解决: 不同的方式来遍历整个整合对象。 何时使用: 遍历一个聚合对象。 如何解决: 把在元素之间游走的责任交给迭代器,而不是聚合对象。 二、结构 组成:    抽象容器 :一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等。    具体容器 :就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等。    抽象迭代器 :定义遍历元素所需要的方法,一般来说会有这么三个方法:取得第一个元素的方法first(),取得下一个元素的方法next(),判断是否遍历结束的方法hasNext(),移出当前对象的方法remove(),    迭代器实现 :实现迭代器接口中定义的方法,完成集合的迭代。 三、适用场景 1、访问一个聚合对象的内容而无须暴露它的内部表示。 2、需要为聚合对象提供多种遍历方式。 3、为遍历不同的聚合结构提供一个统一的接口。 四、优缺点 优点: 1、它支持以不同的方式遍历一个聚合对象。 2、迭代器简化了聚合类。 3、在同一个聚合上可以有多个遍历。 4、在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。

Java(十四)——集合

 ̄綄美尐妖づ 提交于 2020-01-13 11:23:35
目录 一、集合分类及关系 二、集合的特点 三、List接口 1、接口方法 2、实现类区别 3、遍历List 4、比较List中的元素是否相等 四、Set接口 1、接口方法 2、实现类 3、遍历 五、Map接口 1、存键值对——put(key, value) 2、取数据——get(key) 3、其他方法 4、遍历Map 5、获取value原理 6、注意点 集合 一、集合分类及关系 Java的 java.util 包主要提供了以下三种类型的集合: List :一种有序元素可重复列表的集合,例如,按索引排列的 Student 的 List ; Set :一种无序元素不能重复的集合,例如,所有无重复名称的 Student 的 Set ; Map :一种通过键值(key-value)查找的映射表集合,例如,根据 Student 的 name 查找对应 Student 的 Map 。 Java标准库自带的 java.util 包提供了集合类: Collection ,它是除 Map 外所有其他集合类的根接口 二、集合的特点 一是实现了接口和实现类相分离,例如,有序表的接口是 List ,具体的实现类有 ArrayList , LinkedList 等 二是支持泛型,我们可以限制在一个集合中只能放入同一种数据类型的元素 ArrayList<String> al = new ArrayList

es6新增 set

梦想与她 提交于 2020-01-13 07:08:30
es6新增 set: https://www.cnblogs.com/liuna/p/6171003.html es6新增 set Set 基本用法 ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set本身是一个构造函数,用来生成Set数据结构。 var s = new Set(); [2, 3, 5, 4, 5, 2, 2].map(x => s.add(x)); for (let i of s) { console.log(i); } // 2 3 5 4 上面代码通过 add 方法向Set结构加入成员,结果表明Set结构不会添加重复的值。 Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化。 // 例一 var set = new Set([1, 2, 3, 4, 4]); [...set] // [1, 2, 3, 4] // 例二 var items = new Set([1, 2, 3, 4, 5, 5, 5, 5]); items.size // 5 // 例三 function divs () { return [...document.querySelectorAll('div')]; } var set = new Set(divs()); set.size // 56 // 类似于 divs()

Java API —— List接口&ListIterator接口

蓝咒 提交于 2020-01-13 05:18:04
1、List接口概述 有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。 与 set 不同,列表通常允许重复的元素。 例子1: package listdemo; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * Created by gao on 15-12-14. */ public class ListDemo01 { public static void main(String[] args) { // 创建集合对象 List list = new ArrayList(); // 创建字符串并添加字符串 list.add("hello"); list.add("world"); list.add("java"); // 遍历集合 Iterator it = list.iterator(); while (it.hasNext()){ String s = (String)it.next(); System.out.println(s); } } } 输出结果: hello world java 例子2: package

二叉树递归遍历(前序,中序,后序)

谁都会走 提交于 2020-01-13 02:31:25
1.Java 中没有 Tree 的数据结构,不过我们可以自己写一个: public class TreeNode { int val; TreeNode left; TreeNode right; public TreeNode(int val) { this.val = val; } public TreeNode(int val, TreeNode left, TreeNode right) { this.val = val; this.left = left; this.right = right; } } 2.初始化遍历的树 . TreeNode t4=new TreeNode(4,null,null); TreeNode t8=new TreeNode(8,null,null); TreeNode t6=new TreeNode(6,t4,t8); TreeNode t12=new TreeNode(12,null,null); TreeNode t16=new TreeNode(16,null,null); TreeNode t14=new TreeNode(14,t12,t16); TreeNode t10=new TreeNode(10,t6,t14); 3.前序遍历 public static void preOrder(TreeNode treeNode){

单向队列,双向队列,优先队列的基本用法

佐手、 提交于 2020-01-12 21:44:02
1.单向队列,意思就是只能从队列后面加入元素,遵循先进先出原则; # include <queue> # include <iostream> using namespace std ; int main ( ) { queue < int > q ; q . push ( 5 ) //在队列末尾插入一个元素5; q . pop ( ) //删除队列的第一个元素; q . front ( ) //返回队列的第一个元素; q . empty ( ) //判断队列是否为空,如果为空返回true; q . size ( ) //返回队列中有多少元素; //遍历队列中元素可以为: while ( ! q . empty ( ) ) { cout << q . front ( ) << endl ; q . pop ( ) ; } return 0 ; } 2.双向队列,意思是既可以从队尾插入元素,也可以从队列前插入元素 # include <deque> # include <iostream> using namespace std ; int main ( ) { deque < int > q ; deque < int > :: iterator it1 //正向迭代器 deque < int > :: reverse_iterator it2 ; //反向迭代器 q . push

day 2:数据结果之顺序表和链表

好久不见. 提交于 2020-01-12 20:05:47
1.将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入: 1 - > 2 - > 4 , 1 - > 3 - > 4 输出: 1 - > 1 - > 2 - > 3 - > 4 - > 4 思路: 想法 我们可以如下递归地定义在两个链表里的 merge 操作(忽略边界情况,比如空链表等): { list1 [ 0 ] + merge (list1 [ 1 : ] , list2 ) list1 [ 0 ] < list 2 [ 0 ] list2 [ 0 ] + merge (list1, list 2 [ 1 : ] ) otherwise \left\{\begin{array}{ll}{ \text { list1 }[0]+\text { merge (list1 }[1:], \text { list2 })} & {\text { list1 }[0]<\text { list } 2[0]} \\ { \text { list2 }[0]+\text { merge (list1, list } 2[1:])} & {\text { otherwise }}\end{array}\right. { list1 [ 0 ] + merge (list1 [ 1 : ] , list2 ) list2 [ 0 ] +