使用递归可以非常方便地实现二叉树的遍历。如果不使用递归呢,请听我一一道来。首先给出二叉树遍历的递归版本:struct BTNode { char data; BTNode *lchild, *rchild;};void visit(BTNode *p){ coutdatalch...
分类:
其他好文 时间:
2014-12-12 20:36:55
阅读次数:
206
1.首先是二叉树的建立先序递归建立一个 建立一个二叉树 用#表示空void CreatTree(BitNode **root){ char ch; scanf("\n%c",&ch); if(ch == '#') *root = NULL; else { ...
分类:
其他好文 时间:
2014-12-12 01:15:30
阅读次数:
240
我们都知道,对二叉树进行递归遍历非常简单,但递归算法需要额外的栈机制来存储每次递归的值。既然递归算法内部使用栈实现的,那么我们也可以借助于栈来实现二叉树的非递归遍历。下面我们将讲解利用非递归实现二叉树的前序、中序和后序遍历。
1、非递归二叉树前序遍历:
我们知道,二叉树的前序遍历对节点的访问顺序是根节点、左子节点然后右自节点。根据其访问顺序我们可以很容易用栈来实现。具体实现思路如下:
1、遍...
分类:
其他好文 时间:
2014-12-09 09:27:18
阅读次数:
189
/*由式子生成二叉树*/
//例如输入:1-2*3+4/(5+6)-7*8#
#include
#include
//////////////////////////////////////////////////////////////////////////////////////////////////
//定义数据结构
#define MaxSize 50
typedef struct{
...
分类:
其他好文 时间:
2014-11-30 21:37:23
阅读次数:
122
问题:对一个二叉搜索树进行前序遍历,打印出每个结点的值,但是不能使用递归。
解题:
(1)递归可以用迭代来替代
(2)了解递归的前序遍历中发生了什么:①打印出根节点(或子树根节点)的值;②对左子树进行前序遍历;③对右子树进行前序遍历。
递归隐式地使用了一个数据结构栈来存放调用栈上的数据。实际上,递归调用用于隐式地在栈上存储右子树的地址,因此左子树遍历完后,可以继续遍历右...
分类:
其他好文 时间:
2014-11-30 11:30:09
阅读次数:
141
二叉查找树(Binary Search Tree)的遍历的方法有很多,通常使用的是递归的遍历,其便于理解,但是使用递归的话会造成程序运行的空间浪费,效率并不高。为此可以使用一个栈来模拟递归的过程,实现迭代版的二叉查找树的遍历。但是会使用到额外的存储空间,虽说在运行效率上比递归版的有所提高,但是额外的存储空间还是一定的浪费。但是如何减少额外的存储空间呢?我们知道二叉查找树是可以转换为一个双向环形链表...
分类:
其他好文 时间:
2014-11-25 14:39:21
阅读次数:
172
线索二叉树
线索二叉树就是在通用的二叉树里多了点东西,多了什么呢? 前驱和后继,把二叉树变成一个链式的结构。解释下:通常我们的二叉树里,叶子节点是没有孩子,所以指向空也就是NULL,在线索二叉树里,叶子节点的左右孩子分别指向它自己的前驱和后继,而前驱和后继是哪个节点呢?
就是树遍历过程的前一个节点和后一个节点。所以第一个遍历的节点是没有前驱的,最后一个节点是没有后继的。这里一般都是中序线...
分类:
编程语言 时间:
2014-11-23 21:41:46
阅读次数:
263
树的遍历
这三种遍历方法其实都很简单的,举例来说:
a
/ b c
这个是例子下面讲下这三个是如何遍历的。
struct TreeNode;
typedef TreeNode* Node;
typedef int EleType;
struct TreeNode{
Node lchild;
Node rchild;
EleT...
分类:
编程语言 时间:
2014-11-23 01:57:25
阅读次数:
246