遍历

二叉树的深度优先遍历(递归和非递归方式)

帅比萌擦擦* 提交于 2020-01-30 15:59:27
二叉树的深度优先遍历 == 前序遍历 #include <iostream> #include <stack> using namespace std; typedef struct tree { int data; struct tree *l_child; struct tree *r_child; }TreeNode; TreeNode *insertNode(TreeNode *root,int data) { if(root == NULL) { TreeNode *newNode = new TreeNode(); newNode->data = data; newNode->l_child = NULL; newNode->r_child = NULL; root = newNode; } else if(data < root->data) { root->l_child = insertNode(root->l_child,data); } else { root->r_child = insertNode(root->r_child,data); } return root; } TreeNode *createTree(void) { int index = 0; TreeNode *root = NULL; root = insertNode(root

蓝桥杯题目练习(FBI树)

落花浮王杯 提交于 2020-01-30 14:24:24
算法训练VIP FBI树 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。 FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下: 1)T的根结点为R,其类型与串S的类型相同; 2)若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2;由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2。 现在给定一个长度为2N的“01”串,请用上述构造方法构造出一棵FBI树,并输出它的后序遍历序列。 数据规模和约定 对于全部的数据,N < = 10。 注: [1] 二叉树:二叉树是结点的有限集合,这个集合或为空集,或由一个根结点和两棵不相交的二叉树组成。这两棵不相交的二叉树分别称为这个根结点的左子树和右子树。 [2] 后序遍历:后序遍历是深度优先遍历二叉树的一种方法,它的递归定义是:先后序遍历左子树,再后序遍历右子树,最后访问根。 输入 第一行是一个整数N(0 < = N < = 10),第二行是一个长度为2N的“01”串。 输出 包括一行,这一行只包含一个字符串,即FBI树的后序遍历序列。 样例输入 3 10001011 样例输出 IBFBBBFIBFIIIFF 代码 #include

二叉树的遍历

僤鯓⒐⒋嵵緔 提交于 2020-01-30 12:34:34
一、实验目的 1、掌握二叉树的特点及其存储方式; 2、掌握二叉树的创建; 3、掌握二叉树先序、中序、后序遍历的基本方法及应用; 二、实验内容 1、用先序方法建立一棵二叉树; 2、实现先序、中序和后序遍历二叉树的操作; 3、实现统计二叉树叶子结点个数和计算二叉树深度的操作; 三、实验环境 Eclipse环境或C++编程环境 四、实验步骤 1、二叉链表节点类的定义; 2、二叉树类的定义; 3、建立下图所示的二叉树 在以字符串的形式“根左右”定义一棵二叉树时,写出创建二叉树的操作: 4、编程实现以上二叉树的先序、中序和后序遍历操作,输出遍历序列; 5、完成统计以上二叉树中叶子结点的个数或计算以上二叉树的深度; 节点类: package shiyan2 ; public class BiTreeNode { public Object data ; public BiTreeNode lchild , rchild ; public BiTreeNode ( ) { this . data = null ; this . lchild = null ; this . rchild = null ; } public BiTreeNode ( Object data ) { this . data = data ; this . lchild = null ; this . rchild =

复原二叉树

拥有回忆 提交于 2020-01-30 00:17:55
题目描述 小明在做数据结构的作业,其中一题是给你一棵二叉树的前序遍历和中序遍历结果,要求你写出这棵二叉树的后序遍历结果。 输入 输入包含多组测试数据。每组输入包含两个字符串,分别表示二叉树的前序遍历和中序遍历结果。每个字符串由不重复的大写字母组成。 输出 对于每组输入,输出对应的二叉树的后续遍历结果。 样例输入 DBACEGF ABCDEFG BCAD CBAD 样例输出 ACBFGED CDAB 代码 # include <bits/stdc++.h> using namespace std ; struct node { char data ; node * lchild ; node * rchild ; } ; node * creat ( string a , string b ) { string pre1 , pre2 , in1 , in2 ; node * root = NULL ; if ( a . size ( ) > 0 ) { root = new node ; //申请内存 root - > data = a [ 0 ] ; int index = b . find ( a [ 0 ] ) ; pre1 = a . substr ( 1 , index ) ; pre2 = a . substr ( index + 1 , a . size ( ) -

【Python学习笔记】2. 高级变量类型

走远了吗. 提交于 2020-01-30 00:16:45
1 列表(List) 1.1 基本信息 列表存储一串信息; 列表用 [ ] 定义,数据之间用“,”分隔; 列表的数据项不需要具有相同的类型; 列表索引号从0开始。 1.2 列表操作 list.append(self, object) :在末尾添加新object内容; list.clear(self) :清空列表 list.copy(self) :复制 list.count(self, obejct) :object在列表中出现的次数; list.extend(self, iterable) :其他列表中完整的内容追加到当前列表末尾; list.index(self, object, start, stop) :取索引 list.insert(self, index, object) :在指定索引位置插入 list.pop(self, index) :默认删除最后一个/删除指定索引元素 list.remove(self, object) :删除指定数据 list.reverse(self) :逆序,反转 list.sort(self, key, reverse) :升序排序 list.sort(reverse=Ture) :降序排序 1.3 del关键字 del 关键字(delete)删除列表元素 del name_list[1] # del 本质上将一个变量从内存中删除

二叉树的创建与递归和非递归遍历

瘦欲@ 提交于 2020-01-29 23:53:28
二叉树的常规操作就是遍历,这也是二叉树的基本功之一 class TreeNode(): def __init__(self, x): self.val = x self.left = None self.right = None class BinaryTree(object): def __init__(self, pre, tin): self.pre = pre self.tin = tin self.levelTrave = [] # 层次遍历结果 self.preTraveRecur = [] # 前序递归遍历结果 self.preTraveNoRecur = [] # 前序非递归遍历结果 self.inTraveRecur = [] # 中序递归遍历结果 self.inTraveNoRecur = [] # 中序非递归遍历结果 self.postTraveRecur = [] # 后序递归遍历结果 self.postTraveNoRecur = [] # 后序非递归遍历结果 # 利用前序遍历和中序遍历结果重建二叉树 def reConstructBinaryTree(self, pre, tin): # pre为前序遍历结果,tin为中序遍历结果 if len(pre) == 0: return None if len(pre) == 1: return

二叉树的遍历

醉酒当歌 提交于 2020-01-29 20:47:50
1、二叉树的广度遍历 2、二叉树的深度遍历 二叉树的深度遍历,包括了前序遍历、中序遍历、后续遍历。其命名方式是根节点的遍历顺序, 即:先序遍历:先遍历根节点(根节点->左子树->右子树),即先访问根节点再递归的访问左子树,然后递归的访问右子树。 中序遍历:访问的中间位置为根位置,其主要顺序为(左子树->根节点->右子树),即我们先递归的使用中序遍历访问左子树,让后根节点,然后递归的使用中序遍历访问右子树。 后序遍历:最后访问根节点(左子树->右子树->根节点),即我们先递归的使用后续遍历访问左子树,然后递归的使用后续遍历右子树,最后访问根节点 来源: CSDN 作者: lianchaozhao 链接: https://blog.csdn.net/weixin_40809627/article/details/104105319

JavaScript-迭代器模式

自闭症网瘾萝莉.ら 提交于 2020-01-29 14:05:11
迭代器模式 顺序访问一个集合 使用者无需知道集合内部结构(封装) jQuery 示例 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Document</title> </head> <body> <p>jquery each</p> <p>jquery each</p> <p>jquery each</p> <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script> <script> var arr = [1, 2, 3]; var nodeList = document.getElementsByTagName("p"); var $p = $("p"); // 要对这三个变量进行遍历,需要写三个遍历方法 // 第一 arr.forEach(function(item) { console.log(item); }); // 第二 var i, length = nodeList.length; for (i = 0; i < length; i++) { console.log(nodeList[i]); } // 第三 $p.each(function(key, p) { console.log(key, p); })

LeetCode分类刷题

早过忘川 提交于 2020-01-29 11:24:08
一、数组 11. 盛最多水的容器 283. 移动零 70. 爬楼梯 15. 三数之和 26. 删除排序数组中的重复项 189. 旋转数组 88. 合并两个有序数组 1. 两数之和 66. 加一 二、链表 206. 反转链表 24. 两两交换链表中的节点 141. 环形链表 142. 环形链表 II 25. K 个一组翻转链表 21. 合并两个有序链表 三、栈和队列 20. 有效的括号 155. 最小栈 84. 柱状图中最大的矩形 239. 滑动窗口最大值 641. 设计循环双端队列 42. 接雨水 四、哈希表 242. 有效的字母异位词 49. 字母异位词分组 1. 两数之和 五、树、二叉树、二叉搜索树 94. 二叉树的中序遍历 144. 二叉树的前序遍历 590. N叉树的后序遍历 589. N叉树的前序遍历 429. N叉树的层序遍历 六、分治、回溯 70. 爬楼梯 22. 括号生成 226. 翻转二叉树 98. 验证二叉搜索树 104. 二叉树的最大深度 111. 二叉树的最小深度 297. 二叉树的序列化与反序列化 236. 二叉树的最近公共祖先 105. 从前序与中序遍历序列构造二叉树 77. 组合 46. 全排列 47. 全排列 II 50. Pow(x, n) 78. 子集 169. 多数元素 17. 电话号码的字母组合 51. N皇后 七、DFS、BFS 102.

最长公共子数组(与子串同理)

人盡茶涼 提交于 2020-01-29 11:18:27
最长公共子数组(与子串同理) 首先注意子串和子序列的区别: 一个字符串 s 被称作另一个字符串 S 的子串,表示 s 在 S 中出现了; 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。(定义引用LeetCode 1143) 子数组与子串同理 举例: 1、s1: qwerdf, s2: qtwtetr (qwer为最长公共子序列) 2、s1:qwe, s2: qwer(qwe为最长公共子串) 解题思路 1、将两个数字一横一竖想象成一个二维矩阵 dist[A.length+1][B.length+1](+1是为了防止下标越界),i 表示 A数组的下标,j 表示 B数组的下标。i, j 共同用来遍历二维数组 dist。而 dist[i][j] 表示 A数组以第 i 个位置为尾部的数串 和 B数组以第 j 个位置为尾部的数串的最长公共子串。 2、双重for循环遍历,将 dist数组填满, 存在如下两种情况: (1)A[i] = B[j],则dist[i][j] = dist[i][j]+1; (2)A[i] != B[j],则dist[i][j] = 0; 最大的dist[i][j]值即为最长子串的长度。 时间复杂度O(MN),空间复杂度O(MN)。 空间复杂度是可以优化为O(2*max(M