二叉树的遍历可以使用递归的方式实现,并且代码非常简单。而递归实际就是函数反复的调用本身,在栈上反复压栈。所以我们可以用栈来模拟实现递归。1.前序遍历(1)栈是后进先出的特点,所以无条件的把栈的根节点入栈,在把栈顶元素输出之后依次把右孩子,左孩子压入栈中。代码如..
分类:
其他好文 时间:
2016-04-23 23:13:24
阅读次数:
198
树的定义本是递归定义,所以采用递归的方法实现遍历算法,更加让人理解,且代码简单方便。若采用非递归的方法实现,须得利用栈模拟实现。栈的特点(后进先出)非递归实现二叉树的前序遍历:原理如图所示:参考代码如下:void_PrevOrder(Node*root)//非递归实现前序遍历{ stack&..
分类:
其他好文 时间:
2016-04-23 15:04:29
阅读次数:
118
void preOrder2(BinTree *root) //非递归前序遍历 { stack<BinTree*> s; BinTree *p=root; while(p!=NULL||!s.empty()) { while(p!=NULL) { cout<<p->data<<" "; s.push ...
分类:
其他好文 时间:
2016-04-22 18:13:12
阅读次数:
98
对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对
于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归..
分类:
编程语言 时间:
2016-04-22 16:46:29
阅读次数:
164
首先二叉树的节点定义如下:
structBinaryNode
{
BinaryNode*_left;
BinaryNode*_right;
T_data;
BinaryNode(Tdata):_data(data),_left(NULL),_right(NULL)
{};
};
二叉树的结构以及接口如下
template<classT>
classBinaryTree
{
typedefBinaryNode<T>Node;
publ..
分类:
其他好文 时间:
2016-04-22 01:27:48
阅读次数:
2315
#pragmaonce
#include<iostream>
#include<assert.h>
usingnamespacestd;
//直接排序:指的是设定2个下标/指针。然后从下标1开始进行比较,
//升序情况下:若在前的下标/指针大于当前比较数值。就进行数组的后移。
//直到满足当前序列值。然后最终将当前比较数值..
分类:
编程语言 时间:
2016-04-21 11:57:20
阅读次数:
211
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), r ...
分类:
其他好文 时间:
2016-04-20 13:28:00
阅读次数:
128
输入AB#D##C##回车,或者按照规则自己去输入, 规则就是按前序遍历的方式输入, ...
分类:
其他好文 时间:
2016-04-19 17:27:31
阅读次数:
142
这个弄了好久,最主要理解中序遍历各节点的lchild指向左孩子还是前驱 和rchild指向右孩子还是后继, 还有线索化前的初始化和线索好之后的初始化(不知道这么说对不对,毕竟初学), 可以看看小甲鱼的视频,讲解的很不错, 上代码,前序输入就行,看代码自行了解输入规则, ...
分类:
其他好文 时间:
2016-04-19 17:04:46
阅读次数:
159
利用随机函数产生80个(不大于200且各不相同的)随机整数,用这些整数来生成一棵二树,分别对二叉树进行先序遍历,中序遍历和后序列遍历输出树中结点元素序列。注意:先序遍历输出要求采用非递归来实现。 (2)程序实现的基本思想 1.建立合适的二叉树 程序是以 图1.1 的形式建立的。 2.前序遍历是以st ...
分类:
其他好文 时间:
2016-04-19 14:17:48
阅读次数:
369