遍历方法
struct BintreeNode{
int data;
BiTreeNode* lchild;
BiTreeNode* rchild;
}
递归遍历
int PreOrderTraverse(BintreeNode){
if(T == NULL)return 0;
Visit(T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
return 0;
}
int InOrderTraverse(BintreeNode){
if(T == NULL)return 0;
InOrderTraverse(T->lchild);
Visit(T->data);
InOrderTraverse(T->rchild);
return 0;
}
int PostOrderTraverse(BintreeNode T){
if(T == NULL)return 0;
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
Visit(T->data);
return 0;
}
使用栈迭代遍历
void PreOrdertraverse(BintreeNode *T)
{
stack<BintreeNode*> s;
BintreeNode *p=T;
while(p!=NULL||!s.empty())
{
while(p!=NULL)
{
visit(p->data);
s.push(p);
p=p->lchild;
}
if(!s.empty())
{
p=s.top();
s.pop();
p=p->rchild;
}
}
}
void InOrdertraverse(BintreeNode *T)
{
stack<BintreeNode*> s;
BintreeNode *p=T;
while(p!=NULL||!s.empty())
{
while(p!=NULL)
{
s.push(p);
p=p->lchild;
}
if(!s.empty())
{
p=s.top();
s.pop();
visit(p->data);
p=p->rchild;
}
}
}
void PostOrdertraverse(BintreeNode*T)
{
stack<BintreeNode*> s;
BintreeNode *p = T, *r = NULL, temp;
while(p!=NULL||!s.empty())
{
while(p!=NULL)
{
s.push(p);
p=p->lchild;
}
if(!s.empty())
{
p=s.top();
if(p->rchild != NULL && p->rchild != r){
p = p->rchild;
}
else{
visit(p->data);
r = p;
s.pop();
}
}
}
}