闲来无事,重看了《数据结构》一书,突然发现其中的很多代码写的很精妙,以下就是我对二叉树一部分的做的记录。一般遍历就是使用前序、中序、后序三种遍历,我自己平时都是使用递归算法,今天看书才发现递归算法不是最优解,因为函数调用栈层层叠加,还要保存函数的返回地址,实际参数传递,创建局部变量等等。 一、二叉树前序非递归算法 前序遍历的特点是:首先访问根,访问完根后再访问左子树,所以对每一个结点,在访...
汉诺塔问题非递归算法集锦巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo) 汉诺塔问题介绍:在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片,一次只移动一片,不管在哪根针上,小...
1、二叉树的三种遍历方式二叉树有三种遍历方式:先序遍历,中序遍历,后续遍历 即:先中后指的是访问根节点的顺序 eg:先序 根左右 中序 左根右 后序 左右根 遍历总体思路:将树分成最小的子树,然后按照顺序输出 1.1 先序遍历 a 先访问根节点 b 访问左节点 c 访问右节点 a(b ( d ( h ) )( e ( i ) ))( c ( f )( g )) -- abdheicfg 1.2 中序遍历 ...
第一题: 给出{1, 2, 3,…, n}的入栈顺序, 输出所有可能的出栈顺序#include "stdafx.h"
#include <stack>
#include <queue>
#include <iostream>
#include <cstdio>
#include <cstdlib>
usingnamespace std;
int n = 0;
typedef stack<int> Stack;
typedef queue<int> Queue;void dfs(int level,Stack s, Queue buf, constint LEVEL);/** 每一次递归都只有一个元素(level)入栈, 但是可能有0个元素出栈, 也可能有至少一个元素出栈* @...
X1=1/2(x0+a/x0)例如,a为2时,平方根值:1.414214 #include <stdio.h>#include <math.h>double fun(double a, dounle x0){ double x1, y; x1=(x0+ a/x0)/2.0;if( fabs(x1-x0)>=0.00001 ) y=fun(a,x1); else y=x1; return y;}main( ){ double x; printf("Enter x: "); scanf("%lf",&x); printf("The square root of %lf is %lf\n",x,fun(x,1.0));}原文:http://www.cnblogs.com/lozjl/p/7775045.html
Oracle中start with...connect by prior子句使用方法connect by 是结构化查询中用到的,其基本的语法是: select ... from tablename start with 条件1 connect by 条件2 where 条件3;例:select * from tablestart with org_id = ‘HBHqfWGWPy‘connect by prior org_id = parent_id; 简单说来是将一个树状结构存储在一张表里,比方一个表中存在两个字段: org_id,parent_id那么通过表示每一条记录的parent是谁,就能够形成一个树状...
一个自己或间接调用自身的算法叫递归算法。 1、求阶乘n! 第一步:递推表达式 f(n) = {1,n*f(n-1)} 前者:当 n=0(递归终止条件) 后者:n>0 第二步:清楚返回值是什么 调用f(0) 返回值为 1 调用f(1) 返回值为 1*f(0) 调用f(2) 返回值为 1*f(1) 调用f(3) 返回值为 1*f(2) 依次类推 调用f(n) 返回值为 n*f(n-1) ...
# -*- coding: utf-8 -*-
import sysclass My24(int):def __new__(cls, int_num, trace=‘‘, last_opt=‘‘):obj = int.__new__(cls, int_num)return objdef __init__(self, int_num=0, trace=‘‘, last_opt=‘‘):self.val = int_numself.trace = trace if trace else str(int_num)self.last_opt = last_optsuper(int, self).__init__(int_num)def __hash__(self):return hash(self.trace)def adjust_trace(self, opt):if opt i...
算法思路:递归算法,就是一种直接或者间接地调用自身的算法.递归算法的具体实现过程一般通过函数或者子过程来完成,在函数或子过程的内部,编写代码直接或者间接地调用自己,即可完成递归操作.这里列举出求阶乘和数制转换的递归操作实例.?实例1:求阶乘 public static int jiecheng(int i) {if(i!=1){return i*jiecheng(i-1);}return 1;} public static void main(String[] args) {System.out.println(jiecheng(8));}?运行结果??...
例子:中序遍历非递归算法 实现代码://中序遍历的非递归算法int InOrderTraverse_No_DiGui(BiTree T){BiTree p; //顶底指向二叉树中节点的游标InitStack(S); //初始化栈p = T; //p指向所给的二叉树根节点while(p || !StackEmpty(S)){if(p){ //若当前节点非空Push(S, p); //将当前节点入栈p = p->lchild; //游标指向当前节点的左孩子}else{Pop(S, q); //出栈,将栈顶节点返回到一个二叉树节点...
最大值的递归算法 对于一个数组 有A[ 1...n ]算法调用的时候调用max(n)max(i)
if i = 1return A[i]
elseif A[i]>max(i-1) return A[i]elsereturn max(i-1)end if
end if平均值的递归算法 对于数组 a[ 1...n ]sum 初值为 0 index 初值则为1 调用该算法使用 Ave(a,sum,index)Ave(int a[],int sum,int index)if(index > n) return sum/(index-1)elsereturn Ave(a,sum+=a[index],index+1)汉诺塔的 递归算法void move(int ...
在关系数据库中,有两字段是父子关系。通过递归算法,输入一个父ID,能够获取全部相应的子ID。这种数据结构在组织架构中常常使用。显示一般使用树形结构。在Domino中相同能够处理这种情况,下面是个小demo,希望对大家有帮助。交流QQ 873968102 1)视图的数据结构(这数据结构使用在一些应用其中,这是前台UI xpages domino动态编辑树 ) 2)下面是使用LS的递归算法,通过输入一个父ID,把全部子ID带出来。通过 : 分隔,...
1、什么是递归算法 递归算法就是直接或间接调用自己的算法2、递归思想 递归就是方法里调用自身 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口 递归算法代码显得很简洁,但递归算法解题的运行效率较低。所以不提倡用递归设计程序。 在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。要点: ...
递归算法设计的基本思想是:对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到能够直接求解,也就是说到了递推的出口,这样原问题就有递推得解。 关键要抓住的是: (1)递归出口 (2)地推逐步向出口逼近 例子: example: 求5的阶乘。。 如下: Java代码 public class Test { static int multiply(int n){ if(n==1||n==0) return n; else...
例子一:
程序结束口:表达式(n==-1)为true,代表n(100)被递减完了,已经不能被递减了,
如不是-1,则代表还有数值可以被递减,此题及计算结果为偶数总和,递减时应当判断 当前n是否为偶数
如果是偶数,则 sum(偶数总和) = n(当前数值)+ 调用此方法(n(当前数值)-1(每次递减1))
如果不是偶数,则不需要添加到sum 里面,直接再次调用自己本身方法,n-1,进入下一轮/*** 计算1-100以内偶数的总和* n为要计算的数值(100)* sum为总和*/
public static...