先序遍历

NodeJS学习笔记(二).js

一个人想着一个人 提交于 2020-03-30 03:23:39
1 Stream(数据流) 当内存中无法一次装下需要处理的数据时,或者一边读取一边处理更加高效时,我们就需要用到 数据流。NodeJS中通过各种 Stream 来提供对数据流的操作。 (1)为数据来源创建一个只读数据流: var rs = fs.createReadStream(src); // 从src读取文件, 返回一个新的可读流对象 rs.on('data', function (chunk) { // 触发'data'事件 rs.pause(); //暂停触发'data'事件 doSomething(chunk, function () { rs.resume(); //恢复触发'data'事件 }); }); rs.on('end', function () { cleanUp(); }); (2)为数据目标创建一个只写数据流: var rs = fs.createReadStream(src); var ws = fs.createWriteStream(dst); rs.on('data', function (chunk) { if (ws.write(chunk) === false) { rs.pause(); } }); rs.on('end', function () { ws.end(); }); ws.on('drain', function () {

二叉树的遍历(递归与非递归)

心不动则不痛 提交于 2020-03-24 11:59:55
非递归遍历二叉树是使用栈压栈和弹栈时机不同的思想,在非递归先序遍历中,根据"根左右"的访问顺序不同,先访问当前数据,然后依次压入右儿子和左子;在非递归后序遍历中,需要达到"左右根"的顺序,所以使用两个栈,栈2只存储访问的节点,根据先序遍历的思想修改顺序"根右左",先访问当前节点,然后依次压入左儿子和右儿子,最后输出栈2;在非递归中序遍历中,若当前节点不为空,就压栈,当前节点指向左儿子,若为空且栈不为空,就弹栈,当前节点指向右儿子. import java.util.Stack; public class TreeTraversal { public static class Node{ public int value; public Node left; public Node right; public Node(int Value) { value = Value; } } public void preOrder(Node head) { if(head != null) { System.out.print(head.value + " "); if(head.left != null) { preOrder(head.left); } if(head.right != null) { preOrder(head.right); } } } public void

Ehcache计算Java对象内存大小

最后都变了- 提交于 2020-03-24 06:25:00
在EHCache中,可以设置maxBytesLocalHeap、maxBytesLocalOffHeap、maxBytesLocalDisk值,以控制Cache占用的内存、磁盘的大小(注:这里Off Heap是指Element中的值已被序列化,但是还没写入磁盘的状态,貌似只有企业版的EHCache支持这种配置;而这里maxBytesLocalDisk是指在最大在磁盘中的数据大小,而不是磁盘文件大小,因为磁盘文中有一些数据是空闲区),因而EHCache需要有一种机制计算一个类在内存、磁盘中占用的字节数,其中在磁盘中占用的字节大小计算比较容易,只需要知道序列化后字节数组的大小,并且加上一些统计信息,如过期时间、磁盘位置、命中次数等信息即可,而要计算一个对象实例在内存中占用的大小则要复杂一些。 计算一个实例内存占用大小思路 在Java中,除了基本类型,其他所有通过字段包含其他实例的关系都是引用关系,因而我们不能直接计算该实例占用的内存大小,而是要递归的计算其所有字段占用的内存大小的和。在Java中,我们可以将所有这些通过字段引用简单的看成一种树状结构,这样就可以遍历这棵树,计算每个节点占用的内存大小,所有这些节点占用的内存大小的总和就当前实例占用的内存大小,遍历的算法有:先序遍历、中序遍历、后序遍历、层级遍历等。但是在实际情况中很容易出现环状引用(最简单的是两个实例之间的直接引用

二叉树的创建与遍历

怎甘沉沦 提交于 2020-03-21 00:18:04
此时有这样一棵树,其先序遍历:ABCDEFGH;中序遍历:CBEDFAGH;后序遍历:CEFDBHGA;想要以输入结点的方式来创建树。可以考虑一个节点创建成功在创建其左右结点,若其左右结点为空,则返回至上一个结点继续创建,直到创建完毕。 创建树的结点: class BNode{ private BNode leftChild; private BNode rightChild; private char data; public BNode() { } public BNode(char data){ this.data = data; } public BNode(BNode leftChild,BNode rightChild,char data){ this.leftChild = leftChild; this.rightChild = rightChild; this.data = data; } public BNode getLeftChild() { return leftChild; } public void setLeftChild(BNode leftChild) { this.leftChild = leftChild; } public BNode getRightChild() { return rightChild; } public void

【算法日常】二叉树常用遍历方法

坚强是说给别人听的谎言 提交于 2020-03-17 14:56:13
二叉树的遍历 本篇算一个资料整理,就是二叉树遍历方法, 有先序遍历(PreOrder)、中序遍历(InOrder)、后序遍历(PostOrder)、广度优先遍历二叉树(breadth_first_search)、深度优先遍历(depth_first_search) 示例遍历二叉树: 二叉树节点格式: class TreeNode: def __init__(self, val): self.val = val self.left = self.right = None 1. 先序遍历 PreOrder 先遍历根节点,再遍历左子树,最后遍历右子树 def pre_order(root: TreeNode) -> list: if not root: return [] return [root.val] + pre_order(root.left) + pre_order(root.right) #### 遍历结果 ## [4, 2, 1, 3, 6, 5, 7] 2. 中序遍历 InOrder 先遍历左子树,再遍历根节点,最后遍历右子树, def in_order(root: TreeNode) -> list: if not root: return [] return in_order(root.left) + [root.val] + in_order(root.right)

Python实现完全二叉树以及遍历

早过忘川 提交于 2020-03-11 17:57:09
在学校刚刚学到的二叉树是用C语言来实现的,还涉及到了指针等操作。最近疫情原因不能开学,就自己学习了一下Python,就拿Python来试着实现一下,顺便再复习一下二叉树的一些知识。 本文使用Python来构建一个完全二叉树,并且实现树结点添加,层次遍历,先序遍历,中序遍历,后序遍历。 由于我自己对二叉树的理解也不是很深,所以关于二叉树的理论知识就只能自行脑补了,这里直接开始实现了,在实现的过程中也可能会有一些错误,还请大佬们批评指正。 以下为实现的思路,完整代码以及输出可以直接滑倒最后查看。 创建结点 首先创建一个结点的类,结点含有数据和左子,右子,创建后就直接将左子,右子初始化为None,数据则从外部输入进去。 # 创建一个结点的class class Node(object): def __init__(self,valua): self.valua = valua self.Lchild = None self.Rchild = None 然后创建一个二叉树的类,因为结点已经创建了一个node的类,这里只需要初始化一个根结点为None就可以了。 # 创建一个二叉树class class Btree(object): def __init__(self): # 初始化根结点 self.root = None 添加结点 接下来就可以来实现添加结点的funtion类。

先序遍历构建二叉树 C++

旧街凉风 提交于 2020-03-11 13:20:43
# include <bits/stdc++.h> using namespace std ; struct TreeNode { struct TreeNode * lchild , * rchild ; int val ; TreeNode ( int x ) : val ( x ) , lchild ( NULL ) , rchild ( NULL ) { } } ; void create ( TreeNode * & root ) { char x ; cin >> x ; if ( x == '#' ) root = NULL ; else { root = new TreeNode ( x - '0' ) ; create ( root - > lchild ) ; create ( root - > rchild ) ; } } void pre ( TreeNode * root ) { if ( root ) { cout << root - > val << " " ; pre ( root - > lchild ) ; pre ( root - > rchild ) ; } } int main ( ) { TreeNode * root ; create ( root ) ; cout << "create finish!" << endl ; pre (

前中后序遍历

好久不见. 提交于 2020-03-09 15:25:16
今天看了一些关于平和查找二叉树的问题,顺便也复习了一下二叉树的遍历规则,写一下学习文档。 树的遍历顺序大体分为三种:前序遍历(先根遍历、先序遍历),中序遍历(中根遍历),后序遍历(后根遍历)。 前序遍历:前序遍历可以记为根左右,若二叉树为空,则结束返回。 前序遍历的规则: (1)访问根节点 (2)前序遍历左子树 (3)前序遍历右子树 这里需要注意:在完成第2,3步的时候,也是要按照前序遍历二叉树的规则完成。 中序遍历:中序遍历可以记为左根右,也就是说在二叉树的遍历过程中,首先要遍历二叉树的左子树,接着遍历根节点,最后遍历右子树。 同样,在二叉树为空的时候,结束返回。 中序遍历的规则: (1)中序遍历左子树 (2)访问根节点 (3)中序遍历右子树 注意:在完成第1,3步的时候,要按照中序遍历的规则来完成。 后序遍历:后序遍历可以记为左右根,也就是说在二叉树的遍历过程中,首先按照后序遍历的规则遍历左子树,接着按照后序遍历的规则遍历右子树,最后访问根节点。 在二叉树为空的时候,结束返回。 后序遍历二叉树的规则: (1)后序遍历左子树 (2)后序遍历右子树 (3)访问根节点 注意:在完成1,2步的时候,依然要按照后序遍历的规则来完成。 来源: https://www.cnblogs.com/ltc3344/p/12448565.html

求后序遍历

北战南征 提交于 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

剑指offer - 中序+先序遍历创建数组

痴心易碎 提交于 2020-03-07 09:22:14
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路: 在前序遍历里面找到第一个数,则这个数为root,然后在中序遍历的数组中找到这个数,则这个数前面的数都构成root的左子树,右边的点构成其右子树。 然后用递归 class Solution: # 返回构造的TreeNode根节点 def reConstructBinaryTree(self, pre, tin): # write code here if len(pre) == 0: return None elif len(pre) == 1: return TreeNode(pre[0]) target = pre[0] for i in range(0,len(tin)): if tin[i] == target: root = TreeNode(target) root.left = self.reConstructBinaryTree(pre[1:i+1],tin[:i]) root.right = self.reConstructBinaryTree(pre[i+1:],tin[i+1:]) return root