关于树的后续遍历(递归与非递归)
能用递归何必用啥非递归呢…但是题目非得要求非递归…
#include<bits/stdc++.h>
using namespace std ;
typedef struct Bi_Node{
int data ;
Bi_Node *lchild , *rchild ;
}Bi_Node, * Bi_Tree ;
void postOrder1(Bi_Tree T ){//递归后续遍历
if(T){
postOrder1(T->lchild);
postOrder1(T->rchild);
cout << T->data << " " ;
}
}
void postOrder(Bi_Tree T ){//非递归后序遍历——左右根
Bi_Tree p = T;//遍历指针
Bi_Tree r = NULL;//r是标记指针,标记是否去过右孩子
stack<Bi_Tree> s ;//非递归需要栈辅助
while (p || !s.empty()){
if(p){//先找左孩子
s.push(p);
p = p->lchild;
}else {//p空
p = s.top() ;
if(p->rchild && p->rchild != r){//右孩子存在,且没去过
p=p->rchild ;
}else {//没有右孩子,或者是右孩子已经去过了
s.pop() ;
cout << p->data << " " << endl ;
r = p ;
p = NULL ;
}
}
}
}
int main(){
return 0 ;
}
建树大伙儿自己建吧…我懒…有问题欢迎私聊~