#include <stack>
#include <iostream>
using namespace std;
template <class T>
class TreeNode
{
public:
T data;
TreeNode<T> *left; //left child
TreeNode<T> *right; //right child
TreeNode():left(NULL),right(NULL)
{
}
TreeNode(const T& t):data(t),left(NULL), right(NULL)
{
}
TreeNode(const T& t, TreeNode<T*> left, TreeNode<T*> right):data(t),left(left), right(left)
{
}
};
template <class T>
void postOrder(TreeNode<T> *root)
{
stack<TreeNode<T>*> st;
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)
}
分享到:
相关推荐
利用C++实现二叉树的非递归遍历,包含先序,中序和后续遍历
用C++写的二叉树先序遍历、中序遍历和后序遍历非递归算法
二叉树的创建与三种遍历的递归与非递归实现 包括二叉树的动态创建,前序遍历,中序遍历,后续遍历的递归与非递归方法的实现。
二叉树后序遍历,用C语言写的,大家可以看看!
主要介绍了C语言数据结构之二叉树的非递归后序遍历算法的相关资料,希望通过本文能帮助到大家,让大家实现这样的功能,需要的朋友可以参考下
用C++写的,包括二叉树的构建,二叉树的先序遍历、中序遍历和后序遍历非递归算法。
C语言实现二叉树的前序、中序、后续遍历非递归法
C语言实现二叉树的前序、中序、后续遍历(非递归法),大家可以下载看卡哦!
1:构造一个二叉树 2:二叉树前序遍历(递归) 3:二叉树中序遍历(递归) 4:二叉树后续遍历(递归) 5:二叉树前序遍历(非递归) 6:二叉树中序遍历(非递归) 7:二叉树后序遍历(非递归)
二叉树前序遍历、中序遍历和后续遍历的递归算法和非递归算法以及交换二叉树的左右子树等
实现了二叉树的前序递归创建,非递归层次创建,非递归前序加中序创建;前序、中序、后序的递归遍历以及前、中、后、层次的非递归遍历;操作方面,使用后序递归遍历实现了size()和height()方法;除此,还有find...
二叉树的建立,先序、中序、后续,递归非递归遍历。
以先序递归建立二叉树,实现递归先序,中序,后续,非递归中序遍历序列输出,并用树控件显示二叉树结构
c++对二叉树的一些操作,遍历,求叶子树,树高,中序先序求后序等等
简单的二叉树非递归遍历,采用广义表输入,与后续非递归遍历
[问题描述]建立一个二叉树,并对其...二叉树先序中序后续遍历递归与非递归的实现、掌握栈和队列的用法。了解结构体内部嵌套之间的关系 二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构
从键盘输入二叉树的各结点值,按先序递归方式创建二叉树 2 )分别实现先序、中序、后序递归遍历二叉树 3 )输出二叉树的高度 ... 5 )输出二叉树的先序非递归遍历下的结点访问次序 6 )以菜单方式运行
二叉树是一种特殊的树,每个父结点最多只能有两个子结点,在树中,按照结点的“继承”关系可以分为父结点和子...二叉树的递归遍历与非递归遍历,递归遍历采用教材上的做法,利用堆栈结构,对二叉树进行先序中序后续遍历
程序根据后缀表达式建立二叉树,建立过程中用到了栈,并分别采取递归和非递归的方法,对二叉树进行了先序、中序、后续遍历。