您的位置:首页 > 编程语言 > C语言/C++

二叉树 前中后序遍历非递归版本 C++实现

2014-11-13 20:52 525 查看
RT。

//前序排列的非递归实现:
Template<class T>
Void PreOrder(BinaryTreeNode<T> *t)
{
stack <BinaryTreeNode<T> *> S(Maxlength);
BinaryTreeNode<T> *p=t;
do{
while(p){
visit(p);//访问P
S.Add(p);
p=p->LeftChild;
}
If(!S.IsEmpty()){
S.Delete(p);
p=p->RightChild;
}
}while(p||!S.IsEmpty())
}
//中序排列的非递归实现:
template<class T>
void InOrder(BinaryTreeNode<T> *t)     //对*t进行中序遍历
{   stack  <BinaryTreeNode<T> *>   S(MaxLength);
BinaryTreeNode<T> *p=t ;
do {
while (p)
{S.Add(p);   p=p->LeftChild;}
if (!S.IsEmpty())
{S.Delete(p);
Visit(p);
p=p->RightChild;
}
} while (p||!S.IsEmpty())
}
//后序排列的非递归实现:
template<class T>
void BinaryTree<T>::PostOrder1(BinaryTreeNode<T> *t)
{   int mark;
stack<int> markStack; //标志位
stack  <BinaryTreeNode<T> *>   S;
BinaryTreeNode<T> *p=t ;
do {
while (p)
{
S.push(p);
markStack.push(1);
p=p->LeftChild;
}
if (!S.empty())
{   p=S.top();
mark=markStack.top();
if(p->RightChild&&mark==1){
markStack.pop();
markStack.push(2);  //右子树
p=p->RightChild;
}
else{ S.pop();
markStack.pop();
Visit(p);
p=0;
}
}
} while (p||!S.empty()) ;
}


/////
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 二叉树 非递归
相关文章推荐