前序遍历递归
void PreOrder(pTreeT root)
{
if (NULL != root)
{
visit(root);
PreOrder(root->left);
PreOrder(root->right);
}
}
前序遍历非递归
void PreOrderNoRec(pTreeT root)
{
stack<treeT *> s;
while ((NULL != root) || !s.empty())
{
if (NULL != root)
{
visit(root);
s.push(root);
root = root->left;
}
else
{
root = s.top();
s.pop();
root = root->right;
}
}
}
中序遍历递归
void InOrder(pTreeT root)
{
if (NULL != root)
{
BT_InOrder(root->left);
visit(root);
BT_InOrder(root->right);
}
}
中序遍历非递归
void InOrderNoRec(pTreeT root)
{
stack<treeT *> s;
while ((NULL != root) || !s.empty())
{
if (NULL != root)
{
s.push(root);
root = root->left;
}
else
{
root = s.top();
visit(root);
s.pop();
root = root->right;
}
}
后序遍历递归
void PostOrder(pTreeT root)
{
if (NULL != root)
{
BT_PostOrder(root->left);
BT_PostOrder(root->right);
visit(root);
}
}
后序遍历非递归
利用pre记录最近访问的结点
void postOrder(TreeNode<T> *root)
{
stack<TreeNode<T>*> st;//定义栈,节点类型为TreeNode
TreeNode<T> *p = root;
TreeNode<T> *pre = NULL;//pre表示最近一次访问的结点
while(p || st.size()!=0)
{
//沿着左孩子方向走到最左下 。
while(p)
{
st.push(p);
p = p->left;
}
//get the top element of the stack
p = st.top();
//如果p没有右孩子或者其右孩子刚刚被访问过
if(p->right == NULL || p->right == pre)
{
//visit this element and then pop it
cout << "visit: " << p->data << endl;
st.pop();
pre = p;
p = NULL;
}
else
{
p = p->right;
}
}//end of while(p || st.size()!=0)
}
分别来自:
http://www.cppblog.com/ngaut/archive/2012/09/06/2351.html
http://blog.csdn.net/iamyina/article/details/4124613
分享到:
相关推荐
二叉树的基本操作,包括前序、中序、后序遍历的递归和非递归算法,不得不下的资源
二叉树先序、中序、后序遍历非递归算法,简述了二叉树的基本算法。
栈的应用——二叉树的前序、中序、后序非递归遍历算法
已知二叉树的前序和中序遍历,打印后序遍历,采用二叉树的非递归算法,分享给大家~~
数据结构二叉树链式结构的前序遍历,中序遍历,后序遍历用递归的方法,层级遍历采用队列结构
关于数据结构实验的二叉树问题
二叉树前序,中序,后序,求深度的递归和非递归方法
C语言实现通用栈结构 递归遍历二叉树 非递归遍历二叉树 (前,中,后序) exmaple.c为测试文件
关于二叉树前序和后序的非递归遍历算法.rar
二叉树前序、中序、后序三种遍历的非递归算法(C语言)
(1)建立的二叉树; 节点的结构体为: typedef struct ...(2)完成二叉树前序、中序、后序非递归遍历程序;从上至下,从左向右层次遍历;从上至下,从右向左层次遍历; (3)给出程序和每种遍历程序的结果。
二叉树、二叉搜索树的构建,前序、中序、后序的 递归和非递归遍历;前序中序序列构建二叉树……
非递归前序,中序,后序遍历二叉树(优化算法)
C++ 数据结构二叉树(前序/中序/后序递归、非递归遍历) 二叉树的性质: 二叉树是一棵特殊的树,二叉树每个节点最多有两个孩子结点,分别称为左孩子和右孩子。 例: 实例代码: #include #include #include ...
二叉树的递归遍历算法非常好写。这个.cpp文件里是二叉树的非递归遍历!
自己编写的实验二叉树的后序遍历非递归算法 包括以递归中序遍历建立二叉树 前序,中序,后序递归以及非递归实现二叉树的遍历 经vc6.0编译通过 自己实验,不足之处应该很多,望指出
二叉树的遍历、线索及应用( 用递归或非递归的方法都可以) [问题描述] 建立二叉树,并输出二叉树的先序,中序和后序遍历序列,以及二叉树的叶子数。 [基本要求] 要求根据读取的元素建立二叉树,能输出各种遍历。 ...
二叉树的遍历:前序,中序,后序,层序 包括 递归和非递归实现 包括测试代码 二叉树的输出 先找到最左边的叶子并把路上遇到的节点依次压栈,然后弹 出栈顶的元素(该元素为最左边的叶子),并判断(1)它 有没有右...