先序遍历NLR
void PreOrder(BiTree T)
{
if(T!=NULL)
{
visited(T);
preOrder(T->lchild);
preOrder(T->rchild);
}
}
//非递归版本
stack<BiTree> s;
void PreOrder(BiTree T)
{
BiTree p = T;
while(p || !s.empty())
{
if(p)//一路往左
{
visit(p);//访问并入栈
s.push(p);
p = p->lchild;//往左走
}
else//出栈,并转向出栈结点的右子树
{
s.pop();
p = p->rchild;//往右走
}
}
}
中序遍历
void InOrder(BiTree T)
{
if(T!=NULL)
{
InOrder(T->lchild);
visited(T);
InOrder(T->rchild);
}
}
//非递归版本
void InOrder(BiTree T)
{
BiTree p = T;
while(p || !s.empty())
{
if(p)//一路往左
{
s.push(p);
p = p->lchild;//往左走
}
else//出栈,并转向出栈结点的右子树
{
s.pop();
visit(p);//访问并入栈
p = p->rchild;//往右走
}
}
}
后序遍历
void PostOrder(BiTree T)
{
if(T!=NULL)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
visited(T);
}
}
层次遍历
queue<BiTree> q;
void LevelOrder(BiTree T)
{
BiTree p;
q.push_back(T);//更结点入队
while(!q.empty())
{
p = q.pop();
visit(p);
if(p->lchild != NULL)
q.push_back(p->lchid);
if(p->rchild != NULL)
q.push_back(p->rchild);
}
}