1 递归遍历
typedef struct _BiTNode
{
int data;
struct BiTNode* lchild;
struct BiTNode* rchild;
} BiTNode, *BiTree;
void preOrder(BiTree T)
{
if(T == nullptr)
return;
cout << T->data << endl;
preOrder(T->lchild);
preOrder(T->rchild);
}
void preOrder(BiTree T)
{
if(T == nullptr)
return;
preOrder(T->lchild);
cout << T->data << endl;
preOrder(T->rchild);
}
void preOrder(BiTree T)
{
if(T == nullptr)
return;
preOrder(T->lchild);
preOrder(T->rchild);
cout << T->data << endl;
}
2 非递归遍历
void preOrder(BiTree T){
std::stack<BiTNode*> s;
BiTNode* p = T;
while(p || !s.empty()){
while(p){
std::cout << p->data << std::endl;
s.push(p);
p = p->lchild;
}
if(!s.empty()){
p = s.pop();
p = p->rchild;
}
}
}
void midOrder(BiTree T){
std::stack<BiTNode*> s;
BiTNode* p = T;
while(p || !s.empty()){
while(p){
s.push(p);
p = p->lchild;
}
if(!s.empty()){
p = s.pop();
std::cout << p->data << std:::endl;
p = p->rchild;
}
}
void levelOrder(BiTree T){
std::queue<BiTNode*> q;
q.push(T);
while(!q.empty()){
BiTNode* p = q.front();
std::cout << p->data << std::endl;
q.pop();
if(!p->lchild)
q.push(p->lchild);
if(!p->rchild)
q.push(p->rchild);
}
}