我们都知道,对二叉树进行递归遍历非常简单,但递归算法需要额外的栈机制来存储每次递归的值。既然递归算法内部使用栈实现的,那么我们也可以借助于栈来实现二叉树的非递归遍历。下面我们将讲解利用非递归实现二叉树的前序、中序和后序遍历。1、非递归二叉树前序遍历:我们知道,二叉树的前序遍历对节点的访问顺序是根节点...
分类:
其他好文 时间:
2015-01-11 10:58:22
阅读次数:
119
使用递归可以非常方便地实现二叉树的遍历。如果不使用递归呢,请听我一一道来。首先给出二叉树遍历的递归版本:struct BTNode { char data; BTNode *lchild, *rchild;};void visit(BTNode *p){ coutdatalch...
分类:
其他好文 时间:
2014-12-12 20:36:55
阅读次数:
206
我们都知道,对二叉树进行递归遍历非常简单,但递归算法需要额外的栈机制来存储每次递归的值。既然递归算法内部使用栈实现的,那么我们也可以借助于栈来实现二叉树的非递归遍历。下面我们将讲解利用非递归实现二叉树的前序、中序和后序遍历。
1、非递归二叉树前序遍历:
我们知道,二叉树的前序遍历对节点的访问顺序是根节点、左子节点然后右自节点。根据其访问顺序我们可以很容易用栈来实现。具体实现思路如下:
1、遍...
分类:
其他好文 时间:
2014-12-09 09:27:18
阅读次数:
189
二叉树的前序建立递归算法以及前中后序遍历的递归算法已经是人尽皆知了,递归算法也确实为代码的编写带来了很大的方便。然而,有时我们也确实需要它们的非递归算法。将递归算法转化为非递归算法可以帮助我们深入了解函数的调用与栈的原理。这里总结一下二叉树的这些重要的非递归算法。...
分类:
编程语言 时间:
2014-12-07 12:39:23
阅读次数:
210
递归遍历目录的缺点:遇到多层级目录时,层级越多,堆栈的负荷越大。
[java] view
plaincopyprint?
import java.io.File;
import java.util.LinkedList;
/*
* 采用非递归方式遍历目录及其子目录的文件
*/
public class Proce...
分类:
其他好文 时间:
2014-12-04 14:00:23
阅读次数:
147
struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};//递归实现二叉树的遍历。递归算法比较简洁易懂这一就不做解释void Preorder(BinaryTreeNode *p...
分类:
其他好文 时间:
2014-11-25 12:15:17
阅读次数:
151
一、层次遍历:借助队列实现 1 void LevelOrderTraversal(BiTree root) 2 { 3 BiTree e = root;//从根节点开始 4 Queue *q; 5 InitQueue(q); 6 7 if(e)//若根结点非...
分类:
其他好文 时间:
2014-11-19 00:29:25
阅读次数:
238
【题目】不使用递归,对二叉树进行先序、中序和后序遍历【思路】利用栈先序:1. 输出当前结点2. 把右孩子放到栈中3. 当前指针指向左孩子4. 重复1-3,直到叶子结点5. 如果栈不空,则从栈里POP出一个结点,赋值给当前节点6. 重复1-5中序:1. 如果当前节点不为空,把当前节点PUSH2. 当前...
分类:
其他好文 时间:
2014-11-17 15:30:06
阅读次数:
141
二叉树的前序非递归遍历: 前序遍历的顺序:根结点——左孩子——右孩子“。根据前序遍历访问结点的顺序可知:优先访问根结点,然后再分别访问左孩子和右孩子。对于任意结点来说,都可将其视为根结点,因此可直接访问,访问完之后,若其左孩子不为空,则按照相同规则访问左子树;当访问了左子树之后,再访问它的右子树。其...
分类:
其他好文 时间:
2014-11-15 22:59:23
阅读次数:
485