遍历

求后序遍历

北战南征 提交于 2020-03-08 01:05:29
描述 输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。 格式 输入格式 共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。 输出格式 一行,表示树的后序遍历序列。 样例 输入样例 abdec dbeac 输出样例 debca #include <iostream> #include <stdio.h> #include <cstring> #include <stdio.h> #include <algorithm> #include <cmath> using namespace std; //abdhecfg //hdbeafcg //hdebfgca char pre[100],mid[100],rear[100]; int find(char a[],int x){ int len = strlen(a); for(int i=0; i<len; ++i){ if(a[i] == x){ return i; } } return -1; } void solve(char a[], char b[],int as, int ae, int bs, int be){ int m = find(b, a[as]); // printf("m = %c\n",b[m]); if(m == -1){ return ; } int i; char

BeautifulSoup入门

岁酱吖の 提交于 2020-03-07 08:31:58
BeautifulSoup库入门 BeautifulSoup库的理解 BeautifulSoup库是解析、遍历、维护”标签树”的功能库 示例代码: from bs4 import BeautifulSoup soup = BeautifulSoup("<html>data</html>","html.parser")#第一参数是html文档,第二个参数指定parser类型是html.parser soup2 = BeautifulSoup(open("d://demo.html"),"html.parser") BeautifulSoup解析器 解析器 使用方法 条件 bs4的html解析器: BeautifulSoup(mk,’html.parser’) 安装bs4库 lxml的html解析器: BeautifulSoup(mk,’lxml’) pip install lxml lxml的xml解析器: BeautifulSoup(mk,’xml’) pip install lxml html5lib的解析器: BeautifulSoup(mk,’html5lib’) pip install html5lib BeautifulSoup类的基本元素 基本元素 说明 使用方式 Tag 标签,最基本的信息组织单元,分别用<>和表明开头和结尾 soup.a soup.p soup

顺序存储二叉树的遍历

我们两清 提交于 2020-03-07 02:46:00
顺序存储二叉树一个结点下标为n,则其左结点的下标为2*n+1,右结点下标为2*n+2,一个结点的父结点下标为(n-1)/2,因此可以利用递归很容易的写出其遍历方式,这里给出前序遍历示例: //顺序存储二叉树前遍历 public class ArrBinaryTreeDemo { public static void main ( String [ ] args ) { int [ ] arr = { 1 , 2 , 3 , 4 , 5 , 6 , 7 } ; ArrBinaryTree arrBinaryTree = new ArrBinaryTree ( arr ) ; arrBinaryTree . preOrder ( ) ; } } class ArrBinaryTree { private int [ ] arr ; public ArrBinaryTree ( int [ ] arr ) { this . arr = arr ; } // index表示数组的下标 public void preOrder ( int index ) { // 如果数组为空,或者arr.length=0 if ( arr == null || arr . length == 0 ) { System . out . println ( "数组为空,不能按照二叉树的前序遍历" ) ; }

c语言实现单链表的就地逆置

我怕爱的太早我们不能终老 提交于 2020-03-06 21:20:20
` 有几个需要注意的地方 为链表赋值不要用头插法,头插法先插入的结点后输出,不用你去逆置,输出的时候就会逆序输出了 遍历输出链表结点不要用移动头指针去遍历,应为头指针有定位链表作用,应该另外设置一个指针去遍历 List item #include<stdio.h> #include<stdlib.h> #define ERROR 0; #define OK 1; typedef int ElemType; typedef int Status; typedef struct LNode{ ElemType data; struct LNode *next; }LNode, LinkList; //创建空链表,由于链表所占用的空间可以不连续,可以不用判断是否分配成功 Status InitLinkList(LinkList &L) { //生成一个新节点作为头结点,头指针指向头结点,头结点指针域置空 L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; return OK; } //给链表各元素赋值,即生成新结点 Status assign(LinkList &L,int n) { int i,e; LinkList u=L; for(i=0;i<n;i++) { //创建一个结点,让s指向它,注意是用尾插法

对象④for in 循环

ε祈祈猫儿з 提交于 2020-03-06 13:46:02
和 in 操作符一样, for in 循环同样在查找对象属性时遍历原型链上的所有属性。 注意: for in 循环 不会 遍历那些 enumerable 设置为 false 的属性;比如数组的 length 属性。 // 修改 Object.prototype Object.prototype.bar = 1; var foo = {moo: 2}; for(var i in foo) { console.log(i); // 输出两个属性:bar 和 moo } 由于不可能改变 for in 自身的行为,因此有必要过滤出那些不希望出现在循环体中的属性, 这可以通过 Object.prototype 原型上的 hasOwnProperty 函数来完成。 注意: 由于 for in 总是要遍历整个原型链,因此如果一个对象的继承层次太深的话会影响性能。 使用 hasOwnProperty 过滤 // foo 变量是上例中的 for(var i in foo) { if (foo.hasOwnProperty(i)) { console.log(i); } } 这个版本的代码是唯一正确的写法。由于我们使用了 hasOwnProperty ,所以这次 只 输出 moo 。 如果不使用 hasOwnProperty ,则这段代码在原生对象原型(比如 Object.prototype

java二叉树创建层序创建,遍历(递归,非递归版)

自闭症网瘾萝莉.ら 提交于 2020-03-06 12:47:49
使用队列工具 进行二叉树层序创建 后再补充二叉树先序创建,和 二叉树后序非递归遍历 有问题的,或者有更好的实现方式,欢迎指正!!! class TNode < E > ; //结点信息 TNode < Character > createBiTree ( char [ ] array ) ; //层序创建二叉树 int GetHeight ( TNode BT ) ; //求树高 boolean isEmpty ( TNode root ) ; //二叉判空 void PreorderTraversal ( TNode BT ) ; //先序递归遍历 void InorderTraversal ( TNode BT ) ; //中序递归遍历 void PostorderTraversal ( TNode BT ) ; //后序递归遍历 //我们要借鉴递归的思想去理解程序, //递归的优点大家都晓得:代码简洁 //递归缺点,递归层数较多时,空间占用大,性能太低 //所以 要善于将递归 改为非递归程序 void PreorderTraversalIteration ( TNode BT ) ; //先序二叉树非递归遍历 void InorderTraversalIteration ( TNode BT ) ; //中序二叉树非递归遍历 void

Redis-Scan命令

纵饮孤独 提交于 2020-03-06 02:05:53
Scan命令 Scan命令:从海量的 key 中找出满足特定前缀的 key 列表 查询key为某一类型的数据可能有很多方法,例如可以通过keys*或者是keys codehole*,查询key前缀为codehole的redis缓冲数据,但是当缓冲数据量比较大时,该命令表耗费时间,效率比较慢,具体的缺点如下列所说那样。 一、keys * 、keys codehole* 分别是查询全部的key以及查询前缀为codehole的key。特点太暴力,性能不好,搜索的是整个redis; 缺点: 1、没有 offset、limit 参数,一次性吐出所有满足条件的 key,万一实例中有几百 w 个 key 满足条件,当你看到满屏的字符串刷的没有尽头时,你就知道难受了。 2、keys 算法是遍历算法,复杂度是 O(n),如果实例中有千万级以上的 key,这个指令就会导致 Redis 服务卡顿,所有读写 Redis 的其它的指令都会被延后甚至会超时报错,因为 Redis 是单线程程序,顺序执行所有指令,其它指令必须等到当前的 keys 指令执行完了才可以继续。 二、由于keys命令存在以上的缺点,所以redis引入以下scan命令,scan命令的特点: 1、复杂度虽然也是 O(n),但是它是通过游标分步进行的,不会阻塞线程; 2、提供 limit 参数,可以控制每次返回结果的最大条数,limit

快速掌握ES6 iterator Generator和async 之间的关系及其用法

﹥>﹥吖頭↗ 提交于 2020-03-05 23:17:38
1.遍历器iterator 1.1 for遍历 首先从远古讲起,刚出js的时候如何遍历一个数组呢? var arr = [1, 2, 3, 4, 7, 8, 9] for (let i = 0;i < arr.length;i++) { console.log(arr[i]); } 1.2 forEach遍历 看起来笨的一批,所以ES5给你研究了一个foreach方法,但是这个方法不能break,也不能改变数组自身的值,也不能返回任何值。 var arr = [1, 2, 3, 4, 7, 8, 9] var arr2 = arr.forEach((element, index) => { console.log('第' + index + '个数值为:' + element); return element * 2; }); console.log(arr2) // undefined console.log(arr1) // [1, 2, 3, 4, 7, 8, 9] 所以说foreach只给你最基本的操作,其他一概不管,如果你想要改变自身的值或者有break和countinue操作我们可以使用map操作,不展开讲了,之前专门写了篇博客总结了下。 wzr: 数组遍历方法总结 1.3 for-in遍历 那么ES6专门为遍历数组提供了一种方法,就是for-of。说道for-of

二叉树的层次遍历

杀马特。学长 韩版系。学妹 提交于 2020-03-05 18:34:34
题目:二叉树的层平均值 给定一个非空二叉树, 返回一个由每层节点平均值组成的数组. 示例 1: 输入: 3 / \ 9 20 / \ 15 7 输出: [3, 14.5, 11] 解释: 第0层的平均值是 3, 第1层是 14.5, 第2层是 11. 因此返回 [3, 14.5, 11]. 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/average-of-levels-in-binary-tree 解法:需要借助队列来进行遍历,将 节点的左右子树依次放入队列,然后再从队列中取节点,当队列为空时遍历结束。 # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def averageOfLevels(self, root: TreeNode) -> List[float]: if not root: return [] res = [] #记录结果 level = [] #每层的节点值列表 stack = [root] #队列 end =root #每层的边界节点(最右边节点)

探索未知种族之osg类生物---呼吸分解之渲染遍历二

狂风中的少年 提交于 2020-03-05 06:49:57
那么今天我们就正式进入osg整个呼吸动作之中最复杂的一个动作,ViewerBase::renderingTraversals(),我们先介绍renderingTraversals的开头的简单的几步操作。 1、这个函数中先遍历了所有的view中的相机节点分别取得他们的位置Translation以及姿态Rotation,并保存到osg内置的log系统中。 2、得到所有的渲染上下文contexts,然后使用 ViewerBase::checkWindowStatus 检查是否存在有效的渲染上下文,没有的话,需要使用 ViewerBase::stopThreading 释放每个camera对应的渲染器以及停止所有的图形线程和相机线程的运行。 3、记录渲染循环开始的时间,最后会相应的进行统计,此次渲染循环进行了多久,方便开发人员调试。 4、通过getViewerFrameStamp()得到记录了仿真循环运行的参考时间,总时间和总帧数的类osg::FrameStamp中的变量_frameStamp。所以你们需要获取这些信息的话,也可以通过读取这个变量的成员函数来实现。当然,使用 Viewer 中的 osg::Stats 变量_stats 也是可以的,缺省情况下,这个变量会忠 实地记录当前帧以及之前的 24 帧的每帧用时,事件遍历用时,更新遍历用时,以及渲染遍 历用时信息