遍历

2叉搜索树层级遍历

元气小坏坏 提交于 2020-03-03 02:58:03
可以用队列,也可以用数组的方式实现.这里我图方便,用的数组 void printNode(treeNode* rootNode) {//当前设置最多打印5层 if (!rootNode)return; treeNode** fatherArr = new treeNode * [128]{};//每打印完一个父亲数组换行,子数*2,为空的位置也打印出来 treeNode** sonArr = new treeNode * [128]{}; cout << "-----------" << rootNode->data << "-----------" << endl; if (rootNode->left_son) { fatherArr[0] = rootNode->left_son; }if (rootNode->right_son) { fatherArr[1] = rootNode->right_son; } if (rootNode->left_son == nullptr && rootNode->right_son == nullptr)return; size_t sonCountMax = 4; size_t fatherCount = 2; /*for (size_t i = 0; i < 2; ++i) { if (fatherArr[i]) { cout <

数据结构-二叉树的层次遍历18

纵然是瞬间 提交于 2020-03-03 00:21:17
二叉树的层次遍历 之前我已经讲解过了二叉树的先序遍历,中序遍历、后序遍历今天来看一个层次遍历,就以下面的树为例子吧,层次遍历就是一层一层的遍历,下图的层次遍历的结果是1,2,3,4,5,6,7那就看代码吧! # include <iostream> # include <queue> using namespace std ; typedef struct BiTNode { int data ; struct BiTNode * lchild , * rchild ; //左孩子 右孩子 } BiTNode , * BiTree ; void cengcibianli ( BiTNode * T , queue < BiTNode * > & m_que ) { if ( T ) { m_que . push ( T ) ; } BiTNode * temp { nullptr } ; while ( ! m_que . empty ( ) ) { temp = m_que . front ( ) ; m_que . pop ( ) ; if ( temp ) { printf ( "%d " , temp -> data ) ; m_que . push ( temp -> lchild ) ; m_que . push ( temp -> rchild ) ; } } }

Python函数-4 迭代器

♀尐吖头ヾ 提交于 2020-03-02 19:38:22
迭代器 在介绍迭代器之前,先说明下迭代的概念: 迭代:通过for循环遍历对象的每一个元素的过程。 Python的for语法功能非常强大,可以遍历任何可迭代的对象。 在Python中,list/tuple/string/dict/set/bytes都是可以迭代的数据类型。 可以通过collections模块的Iterable类型来判断一个对象是否可迭代: from collections import Iterable isinstance('abc', Iterable) # str是否可迭代 True isinstance([1,2,3], Iterable) # list是否可迭代 True isinstance(123, Iterable) # 整数是否可迭代 False 迭代器 迭代器是一种可以被遍历的对象,并且能作用于next()函数。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。 迭代器只能往后遍历不能回溯,不像列表,你随时可以取后面的数据,也可以返回头取前面的数据。迭代器通常要实现两个基本的方法:iter() 和 next()。 字符串,列表或元组对象,甚至自定义对象都可用于创建迭代器: from collections import Iterable,Iterator print(isinstance([],Iterable)) 是否可迭代

数据结构相关

白昼怎懂夜的黑 提交于 2020-03-02 16:58:18
记录一下数据结构的一些东西,方便复习应用 二叉树 结点的度:结点拥有的子树的数目 叶子结点:度为0的结点 分支结点:度不为0的结点 树的度:树中结点的最大的度 层次:根结点的层次为1,其余结点的层次等于该结点的双亲结点的层次加1 树的高度:树中结点的最大层次 森林:0个或多个不相交的树组成。对森林加上一个根,森林即成为树;删去根,树即成为森林。 满二叉树 定义:高度为h,并且由2h-1个结点组成的二叉树,称为满二叉树 完全二叉树 定义:一棵二叉树中,只有最下面两层结点的度可以小于2,并且最下层的叶结点集中在靠左的若干位置上,这样的二叉树称为完全二叉树。 树的遍历 详解链接 前序遍历-根左右 中序遍历-左根右 后序遍历-左右根 根据前序遍历中序遍历推导树的结构、根据树的中序遍历后序遍历推导树的结构 详细讲解 链表 详细讲解 注意 区分 node 和 node.val 链表和数组的区别: 两者的区别: 数组静态分配内存,链表动态分配内存。 数组在内存中是连续的,链表是不连续的。 数组利用下标定位,查找的时间复杂度是O(1),链表通过遍历定位元素,查找的时间复杂度是O(N)。 数组插入和删除需要移动其他元素,时间复杂度是O(N),链表的插入或删除不需要移动其他元素,时间复杂度是O(1)。 JS查找算法 https://www.cnblogs.com/zhuochong/p

二叉树的前序遍历、中序遍历和后序遍历

女生的网名这么多〃 提交于 2020-03-02 11:51:58
public class BinaryTreeDemo { public static void main ( String [ ] args ) { BinaryTree binaryTree = new BinaryTree ( ) ; HeroNode root = new HeroNode ( "宋江" , 1 ) ; HeroNode hero2 = new HeroNode ( "无用" , 2 ) ; HeroNode hero3 = new HeroNode ( "卢俊义" , 3 ) ; HeroNode hero4 = new HeroNode ( "林冲" , 4 ) ; //说明,我们先手动创建二叉树,后面我们学习递归的方式创建二叉树 root . setLeft ( hero2 ) ; root . setRight ( hero3 ) ; hero3 . setRight ( hero4 ) ; binaryTree . setRoot ( root ) ; //前序遍历 System . out . println ( "前序遍历" ) ; binaryTree . preOrder ( ) ; //中序遍历0 System . out . println ( "中序遍历" ) ; binaryTree . infixOrder ( ) ; /

二叉树的遍历问题

非 Y 不嫁゛ 提交于 2020-03-02 01:02:36
二叉树的定义是用递归定义的,这样我们会发现在它在前中后遍历、甚至插入、建立程序中常常用到递归,实际上把握好了递归,也就把握好了二叉树的遍历问题。 下面是一些问题练习 1.从一个遍历(明确空树)中确定树 时间限制: 1 Sec 内存限制: 32 MB 提交: 312 解决: 186 [提交][状态][讨论版][命题人:外部导入] 题目描述 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。 输入 输入包括1行字符串,长度不超过100。 输出 可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。 每个输出结果占一行。 样例输入 a#b#cdef##### a## 样例输出 a b f e d c a 分析: 这个问题其实简单,题目是给出了前序遍历的输入,如果我们也跟着前序遍历,过程中再建立树,题目就可解了,不过得注意边界条件发生了变化。 # include <iostream> # include <string> using namespace std ; string s ; int i , n ; //用来记录字符串位置和大小

angularjs学习:$digest

左心房为你撑大大i 提交于 2020-03-01 21:08:36
angularjs扩展了javascript的事件流程机制:它会扩展这个标准的浏览器流程,创建一个Angular上下文。这个Angular上下文指的是运行在Angular事件循环内的特定代码,该Angular事件循环通常被称作$digest循环。 $digest循环有两个主要组成部分: 1 $watch列表 2$evalAsync列表 $digest循环过程: 1.绑定$scope对象的UI元素会添加一个$watch到 $watch列表 中,$watch列表会通过一个叫做“脏值检查”的程序解析 2. 脏值检查 :Angular会遍历$watch列表,如果从旧值更新后的值没有发生变化,它会继续遍历监控列表。如果值发生了变化,该应用会启用新值并继续遍历$watch列表,只要有任何值发生变化,应用将会退回到$watch循环中,直到检测到不再有任何变化。 3.新的$digest循环没有检测到变化。 4.浏览器拿回控制权,更新与$scope.name新值相应部分的DOM。 ================================================================ angularjs是通过$apply来触发angular上下文的,然后进入$ digest循环。 来源: oschina 链接: https://my.oschina.net/u/1011458

jQuery的map静态方法

喜你入骨 提交于 2020-03-01 19:54:45
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>10-jQuery的静态方法的map方法</title> <script src="../js/jquery-3.4.1.js"></script><script> var arr=[1,3,5,7,9]; var obj={0:1,1:3,2:5,3:7,4:9,length:5}; /** * 第一个参数当前遍历到的元素 * 第二个参数当前遍历到的索引 * 第三个参数当前便利到的数组 * 注意点: * 和原生的forEach一样不能遍历伪数组 */ /* arr.map(function (value,index,array) { console.log(index,value,array); });*/ /*obj.map(function (value,index,array) { console.log(index,value,array); });*/ /** * 第一个参数:要遍历到的数组 * 第二个参数:每遍历一个元素之后执行的回调函数 * 回调函数 * 第一个参数:遍历到的元素 * 第二个参数:遍历到的索引 * 注意点: * 和jQuery的each静态方法一样 map也可以遍历伪数组 */ /*$.map(arr

已知二叉树的先序遍历和中序遍历序列求后序遍历序列

邮差的信 提交于 2020-03-01 13:53:40
package algorithm01; import java.util.Scanner; /** * 给出先序遍历和中序遍历序列求出二叉树的后续遍历序列 * @author wxisme * */ public class ToReverse { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String s1, s2; while(scan.hasNext()) { s1 = scan.next(); s2 = scan.next(); build(s1.length(), 0, 0, s1, s2); } } public static void build(int n, int s1_at, int s2_at, String s1, String s2) { if(n <= 0) return; //求出根节点在中序遍历中的位置 int p = s2.indexOf(s1.charAt(s1_at)) - s2_at; //后续遍历左子树 build(p, s1_at+1, s2_at, s1, s2); //后续遍历右子树 build(n-p-1, s1_at+p+1, s2_at+p+1, s1, s2); //访问根节点 System.out