前面介绍了4种方法(实质是3种),构造树。 在此,需要特别说明的是,那些都是成功的、漂亮的方法和案例 ,但实际上在解决问题的过程中,有很多其它的尝试。比如本篇介绍的方法,就是不可行的。 想说明一个道理,在走向成功的道路上,会经历很多不算太成功的事情。 我们在前面的例子中,用递归计算子结点的深度level。但实际上,我最开始想到的一种方法正好反过来了。 思路:最底层的节点level为1,如...
分类:
其他好文 时间:
2014-12-21 07:06:29
阅读次数:
166
8个月没维护过blog了,想想看也是经历了挺多的,学了不少东西。慢慢的把自己的一些心得和总结发出来,和大家分享和改正。好了,上面是题外话,今天的主题是递归算法的实现要素和分析。转载请注明出处,谢谢~一、分析和总结写好一个递归算法,我认为主要是把握好如下三个方面:1. 提取重复的逻辑。2. 控制逻辑边...
分类:
编程语言 时间:
2014-12-18 22:11:14
阅读次数:
339
原理: 在函数或子过程的内部,直接或者间接地调用自己的算法。举例: 已知数组 a=[1,[2,[3,[4,'null']]]],算法实现数组 b=[4,[3,[2,[1,'null']]]],代码如下: var tmp = [], a = [1,[2,[3,[4,"null"]]]];func...
分类:
编程语言 时间:
2014-12-17 16:00:45
阅读次数:
172
二叉树的遍历方式基本就是前序遍历,中序遍历,后序遍历和层次遍历。从代码的角度来说,前三种最简单的就是用递归了,代码会非常简洁。但是递归有一个缺陷,就是当二叉树的节点非常多的时候,层次深的递归会不停的进行程序的压栈和出栈操作,效率比较低。这里就不写递归算法了,只写四种遍历的非递归算法。
先定义二叉树的节点如下:
/**
* Definition for binary tree
* pub...
分类:
编程语言 时间:
2014-12-15 13:47:08
阅读次数:
305
1、二叉树定义:
typedef struct BTreeNodeElement_t_ {
void *data;
} BTreeNodeElement_t;
typedef struct BTreeNode_t_ {
BTreeNodeElement_t *m_pElemt;
struct BTreeNode_t_ *m_pLeft;
struct B...
分类:
编程语言 时间:
2014-12-15 13:45:29
阅读次数:
223
/***Date : 2014.12.10***/
//递归算法:是在程序中不断反复“调用自身”来达到求解问题的方法。 要求带求解问题能够分解为相同问题的一个子问题,多次递归调用,完成求解。
//递归调用时主调函数又是被调函数;执行递归的函数将反复调用其自身,每调用一次就进入新的一层。
//直接递归:在函数中调用函数本身。
//间接递归:间接地调用一个函数,用得不多。
//递归求阶乘...
分类:
编程语言 时间:
2014-12-11 00:20:52
阅读次数:
182
我们都知道,对二叉树进行递归遍历非常简单,但递归算法需要额外的栈机制来存储每次递归的值。既然递归算法内部使用栈实现的,那么我们也可以借助于栈来实现二叉树的非递归遍历。下面我们将讲解利用非递归实现二叉树的前序、中序和后序遍历。
1、非递归二叉树前序遍历:
我们知道,二叉树的前序遍历对节点的访问顺序是根节点、左子节点然后右自节点。根据其访问顺序我们可以很容易用栈来实现。具体实现思路如下:
1、遍...
分类:
其他好文 时间:
2014-12-09 09:27:18
阅读次数:
189
1.欧几里得递归算法2.欧几里得迭代算法3.连续整数检测算法4.递归算法实验一算法问题求解基础实验名称:算法问题求解基础实验章节:算法设计与分析第一章内容实验内容第一部分 欧几里得算法求最大公约数问题:1. 计算:34931与 75236 的最大公约数: 1 #include 2 3 //1.欧几....
分类:
编程语言 时间:
2014-12-08 22:34:55
阅读次数:
265
转自地址http://blog.csdn.net/metasearch/article/details/4428865在算法分析中,当一个算法中包含递归调用时,其时间复杂度的分析会转化为一个递归方程求解。实际上,这个问题是数学上求解渐近阶的问题,而递归方程的形式多种多样,其求解方法也是不一而足,比较...
分类:
编程语言 时间:
2014-12-08 19:25:13
阅读次数:
209