标签:中序 dash lse stack tree 遍历 后序遍历 empty 实现
递归实现结构很好记,上来写两递归,递归左子树,递归右子树。
前序遍历,访问节点(打印节点)在两个递归前面——中、左、右;
中序遍历,访问放递归中间——左中右;
后序遍历,先两递归,最后才访问——左、中、右。
1)先序遍历
void preorder(BiTree T)
{
if (T != NULL)
{
visit(T);
preorder(T->lchild);
preorder(T->rchild);
}
}
2)中序遍历
void inorder(BiTree T)
{
if (T != NULL)
{
inorder(T->lchild);
visit(T);
inorder(T->rchild);
}
}
3)中序遍历利用栈
void inorder1(BiTree T)
{
Sqstack S;
initstack(S);
BiTree p = T;
while (p||!stackempty(S))
{
if (p)
{
push(S, p->data);
p = p->lchild;
}
else
{
pop(S, p->data);
visit(p);
p = p->rchild;
}
}
}
4)后序遍历
void postorder(BiTree T)
{
if (T != NULL)
{
postorder(T->lchild);
postorder(T->rchild);
visit(T);
}
}
5)后序遍历非递归
void postorder1(BiTree T)
{
Sqstack S;
BiTNode *r,*p;
//BiTree p;
initstack(S);
p = T;
r = NULL;
while (p||!stackempty(S))
{
if (p)
{
push(S, p->data);
p = p->lchild;
}
else
{
pop(S, p->data);
if (p->rchild&&p->rchild != r)
{
p = p->rchild;
push(S, p->data);
p = p->lchild;
}
else
{
pop(S, p->data);
visit(p);
r = p;
p = NULL;
}
}
}
}
标签:中序 dash lse stack tree 遍历 后序遍历 empty 实现
原文地址:https://www.cnblogs.com/brage/p/12888415.html