递归函数

python实现二叉树和它的七种遍历

时间秒杀一切 提交于 2020-03-28 18:37:16
介绍: 树是数据结构中非常重要的一种,主要的用途是用来提高查找效率,对于要重复查找的情况效果更佳,如二叉排序树、FP-树。另外可以用来提高编码效率,如哈弗曼树。 代码: 用python实现树的构造和几种遍历算法,虽然不难,不过还是把代码作了一下整理总结。实现功能: 树的构造 递归实现先序遍历、中序遍历、后序遍历 堆栈实现先序遍历、中序遍历、后序遍历 队列实现层次遍历 #coding=utf-8 class Node(object): """节点类""" def __init__(self, elem=-1, lchild=None, rchild=None): self.elem = elem self.lchild = lchild self.rchild = rchild class Tree(object): """树类""" def __init__(self): self.root = Node() self.myQueue = [] def add(self, elem): """为树添加节点""" node = Node(elem) if self.root.elem == -1: # 如果树是空的,则对根节点赋值 self.root = node self.myQueue.append(self.root) else: treeNode = self.myQueue

Vue--$watch()源码分析

♀尐吖头ヾ 提交于 2020-03-27 11:44:27
  这一段时间工作上不是很忙,所以让我有足够的时间来研究一下VueJs还是比较开心的 (只要不加班怎么都开心),说到VueJs总是让人想到双向绑定,MVVM,模块化,等牛逼酷炫的名词,而通过近期的学习我也是发现了Vue一个很神奇的方法$watch,第一次尝试了下,让我十分好奇这是怎么实现的, 为什么变量赋值也会也会触发回调?这背后又有什么奇淫巧技?怀着各种问题,我看到了一位大牛,杨川宝的文章,但是我还是比较愚笨,看了三四遍,依然心存疑惑,最终在杨大牛的GitHub又看了许久,终于有了眉目,本篇末尾,我会给上链接   在正式介绍$watch方法之前,我有必要先介绍一下实现基本的$watch方法所需要的知识点,并简单介绍一下方便理解:     1) Object.defineProperty ( obj, key , option) 方法         这是一个非常神奇的方法,同样也是$watch以及实现双向绑定的关键         总共参数有三个,其中option中包括 set(fn), get(fn), enumerable(boolean), configurable(boolean)         set会在obj的属性被修改的时候触发,而get是在属性被获取的时候触发,( 其实属性的每次赋值,每次取值,都是调用了函数 )     2) Es6 知识,例如Class,()

递归

不羁的心 提交于 2020-03-25 17:04:16
一、叠加多个装饰器的加载、运行分析 def deco1(func1): #func1=wrapper2的内存地址 def wrapper1(*args,**kwargs): print("正在运行deco1.wrapper1") res1 = func1(*args,**kwargs) return res1 return wrapper1 def deco2(func2): #func2=wrapper3的内存地址 def wrapper2(*args,**kwargs): print("正在运行deco2.wrapper2") res2 = func2(*args,**kwargs) return res2 return wrapper2 def deco3(name): #func3=被装饰对象index的内存地址 def otter(func3): def wrapper3(*args,**kwargs): print("正在运行deco3.wrapper3") res3 = func3(*args,**kwargs) return res3 return wrapper3 return otter #加载顺序自上而下 @deco1 #===> index = deco1(wrapper2)的内存地址 @deco2 #====> index = deco2(wrapper3

递归 实例1

狂风中的少年 提交于 2020-03-22 07:44:20
已知有列表:L = [[3,5,8],10,[[13,14],15],18]1)写出一个函数print_list(lst)打印出列表中所有数字print_list(L)2)写出一个函数sum_list(lst)返回列表中所有数字的和print_list(sum_list(L))注:type(x) 可以返回一个变量的类型L = [[3,5,8],10,[[13,14],15],18] def print_list(L): for x in L: if type(x) != list: #判断对应元素是一个列表还是数值,如果是数值直接打印 print(x,end=' ') else: #否则调用print_list()递归的将对应列表内元素进行打印 print_list(x) print_list(L) 执行结果: 3 5 8 10 13 14 15 18 def sum_list(lst): val = 0 for x in lst: if type(x) != list: val += x else: val+=sum_list(x) return val print(sum_list(L)) 执行结果: 86    来源: https://www.cnblogs.com/vincent-sh/p/12543948.html

数据结构——树的相关概念

强颜欢笑 提交于 2020-03-21 12:58:05
平衡二叉树和二叉查找树 至多有两个子节点的树成为二叉树 1)平衡二叉树 1)树的左右高度差不能超过1. 2)任何往下递归的左子树和右子树,必须符合第一条性质 3)没有任何节点的空树或只有跟节点的树也是平衡二叉树 树的节点Node是key value的形式。因为key可能不连续,甚至不是整数,所以我们没办法使用数组来表示,这个时候我们就可以用二叉查找树来实现 2)二叉查找树 树如其名,二叉查找树非常擅长数据查找。 二叉查找树额外增加了如下要求:它的左子树上所有节点的值都小于它,而它的右子树上所有节点的值都大于它。 查找的过程从树的根节点开始,沿着简单的判断向下走,小于节点值的往左边走,大于节点值的往右边走,直到找到目标数据或者到达叶子节点还未找到。 通常设计Node节点来表示key value这样的数据对 二叉查找树的insert package bobo.algo; // 二分搜索树 // 由于Key需要能够进行比较,所以需要extends Comparable<Key> public class BST<Key extends Comparable<Key>, Value> { // 树中的节点为私有的类, 外界不需要了解二分搜索树节点的具体实现 private class Node { private Key key; private Value value; private

oracle递归函数

两盒软妹~` 提交于 2020-03-17 05:39:46
oracle start with connect by 使用方法 oracle中 connect by prior 递归算法 Oracle中start with...connect by prior子句使用方法 connect by 是结构化查询中用到的,其基本的语法是: select ... from tablename start with 条件1 connect by 条件2 where 条件3; 例: select * from table start with org_id = 'HBHqfWGWPy' connect by prior org_id = parent_id; 简单说来是将一个树状结构存储在一张表里,比方一个表中存在两个字段: org_id,parent_id那么通过表示每一条记录的parent是谁,就能够形成一个树状结构。 用上述语法的查询能够取得这棵树的全部记录。 当中: 条件1 是根结点的限定语句,当然能够放宽限定条件,以取得多个根结点,实际就是多棵树。 条件2 是连接条件,当中用PRIOR表示上一条记录,比方 CONNECT BY PRIOR org_id = parent_id就是说上一条记录的org_id 是本条记录的parent_id,即本记录的父亲是上一条记录。 条件3 是过滤条件,用于对返回的全部记录进行过滤。 简介例如以下:

栈->栈与递归

吃可爱长大的小学妹 提交于 2020-03-07 10:03:23
文字简述 1.阶乘函数 2.2阶Fiibonacci数列 3.n阶Hanoi塔问题 代码实现 1 // 2 // Created by lady on 19-4-3. 3 // 4 5 #include <stdio.h> 6 #include <stdlib.h> 7 #include <string.h> 8 9 static int Fact(int n) 10 { 11 if(n==0){ 12 return 1; 13 }else{ 14 return n*Fact(n-1); 15 } 16 } 17 18 static int Fibonacci(int n) 19 { 20 if(n == 0){ 21 return 0; 22 }else if(n == 1){ 23 return 1; 24 }else{ 25 return (Fibonacci(n-1) + Fibonacci(n-2)); 26 } 27 } 28 29 // 将塔座x上按直径由小到大且自上而下编号为1至n的n个圆盘按规则搬到塔座z上,y可作辅助塔座 30 // 搬动操作move(x, n, z)可定义为(c是初值为0的全局变量,对搬动计数) 31 // printf("%d. Move disk %d from %c to %c", ++c, n, x, z); 32 int C = 0;

习题10-3 递归实现指数函数 (15分)

岁酱吖の 提交于 2020-03-07 09:19:01
本题要求实现一个计算x​n​​(n≥1)的函数。 函数接口定义: double calc_pow( double x, int n ); 函数 calc_pow 应返回 x 的 n 次幂的值。建议用递归实现。题目保证结果在双精度范围内。 裁判测试程序样例: #include <stdio.h> double calc_pow( double x, int n ); int main() { double x; int n; scanf("%lf %d", &x, &n); printf("%.0f\n", calc_pow(x, n)); return 0; } /* 你的代码将被嵌在这里 */ 输入样例: 2 3 输出样例: 8 解答: double calc_pow( double x, int n ){ double res=1; for(int i=1;i<=n;i++){ res*=x; } return res; } 来源: CSDN 作者: youandworld 链接: https://blog.csdn.net/qq_30377869/article/details/104708879

习题10-5 递归计算Ackermenn函数 (15分)

泄露秘密 提交于 2020-03-07 09:18:22
本题要求实现Ackermenn函数的计算,其函数定义如下: 函数接口定义: int Ack( int m, int n ); 其中 m 和 n 是用户传入的非负整数。函数 Ack 返回Ackermenn函数的相应值。题目保证输入输出都在长整型 范围内。 裁判测试程序样例: #include <stdio.h> int Ack( int m, int n ); int main() { int m, n; scanf("%d %d", &m, &n); printf("%d\n", Ack(m, n)); return 0; } /* 你的代码将被嵌在这里 */ 输入样例: 2 3 输出样例: 9 解答: int Ack( int m, int n ) { if(m==0) return n+1; else if(n==0&&m>0) return Ack(m-1,1); else if(m>0&&n>0) return Ack(m-1,Ack(m,n-1)); } 来源: CSDN 作者: youandworld 链接: https://blog.csdn.net/qq_30377869/article/details/104708883

习题10-6 递归求Fabonacci数列 (10分)

随声附和 提交于 2020-03-07 09:17:32
本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下: f(n)=f(n−2)+f(n−1) (n≥2),其中f(0)=0,f(1)=1。 函数接口定义: int f( int n ); 函数 f 应返回第 n 个Fabonacci数。题目保证输入输出在长整型范围内。建议用递归实现。 裁判测试程序样例: #include <stdio.h> int f( int n ); int main() { int n; scanf("%d", &n); printf("%d\n", f(n)); return 0; } /* 你的代码将被嵌在这里 */ 输入样例: 6 输出样例: 8 解答: int f( int n ){ if(n==0) return 0; if(n==1 || n==2) { return 1; } return f(n-1) + f(n-2); } 来源: CSDN 作者: youandworld 链接: https://blog.csdn.net/qq_30377869/article/details/104708887