二叉树的各种遍历方法有 前序遍历 中序遍历 后序遍历 层序遍历。其中前三种遍历有递归程序可以实现,但是我们也有必要掌握其非递归版本的算法实现。正好在leetcode中遇到了遍历二叉树的问题,今天在这里一并总结了。首先,引用leetcode中关于二叉树节点的定义。1 // Definition ...
分类:
编程语言 时间:
2014-11-09 12:37:56
阅读次数:
329
二叉链表存储结构的许多基本操作都采用了递归函数,因为二叉树的层数是不定的,正确采用递归函数可简化编程。递归函数的特点:一是降阶的,二是有出口的。递归编程是简单的,但是效率是不高的,因此,基本操作既要熟悉递归编程,又要熟悉非递归编程。...
分类:
其他好文 时间:
2014-11-08 15:15:01
阅读次数:
491
深度优先遍历
1.深度优先遍历的递归定义
假设给定图G的初态是所有顶点均未曾访问过。在G中任选一顶点v为初始出发点(源点),则深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止。若此时图中仍有未访...
分类:
其他好文 时间:
2014-11-07 23:35:44
阅读次数:
511
前序排列的非递归实现:
Template
Void PreOrder(BinaryTreeNode *t)
{
stack *> S(Maxlength);
BinaryTreeNode *p=t;
do{
while(p){
visit(p);//访问P
S.Add(p);
...
分类:
编程语言 时间:
2014-11-07 20:53:19
阅读次数:
258
递归方法int BinSearch(int Array[],int low,int high,int key/*要找的值*/){ if (lowArray[mid]) return BinSearch(Array,mid+1,high,key); } else return -1;} 非递归方...
分类:
其他好文 时间:
2014-11-07 12:57:21
阅读次数:
142
归并算法是将两个或两个以上的有序表组合成一个新的有序表,它的原理是:假设初始序列含有n个记录,则可以看成是n个有序子序列,两两归并,得到[n/2]个有序子序列,再次归并……不断重复直至归并到长度为n的有序序列,这样的排序方法称为2路归并排序。
实例一:递归形式的2路归并算法
#define MAXSIZE 4
int data[MAXSIZE] = {2,1,0,3};
/*...
分类:
编程语言 时间:
2014-11-06 22:05:09
阅读次数:
280
"."代表空树,程序分别以先序、中序和后序的方式递归遍历二叉树,再以中序非递归的方式遍历二叉树,并以中序递归方式输出叶子结点并统计叶子结点的个数。最后将二叉树线索化并中序遍历线索二叉树。...
分类:
其他好文 时间:
2014-11-03 10:18:08
阅读次数:
215
mooc的作业本来以为是很简单,真正写下去才知道不简单。每个都略有技巧,细细琢磨#include #include int all, top;class TreeNode{ public: int value; TreeNode* left; Tree...
分类:
编程语言 时间:
2014-11-02 19:30:26
阅读次数:
276
二叉树递归遍历可谓是学过数据结构的同仁都能想一下就能写出来,但在应聘过程我们常常遇到的是写出一个二叉树非递归遍历函数,接着上篇文章写二叉树的非递归遍历,先难后易,一步一步的来.
先上代码:
#include "binarytree.h"
#include
#include
#ifndef RECU
#warning("RECU is not defined")
/**
*前序遍历...
分类:
其他好文 时间:
2014-11-02 18:18:36
阅读次数:
232