두 갈래 트리 사이의 비반복 - - 앞, 가운데, 뒤쪽
1136 단어 데이터 구조와 알고리즘
이전 순서:
Status preOrder(BiTree T, Status (*Visit)(TElemType e)) {
InitStack(S); p = T;
while(p || !StackEmpty(S)) {
while(p) {
visit(p->data);
push(S,p);
p = p->lchild;
}
if(!StackEmpty(S)) {
pop(S,p);
p = p->rchild;
}
}
}
중간 순서 반복:
Status InOrder(BiTree T, Status (*Visit)(TElemType e)) {
InitStack(S); p = T;
while(p || !StackEmpty(S)) {
if(p) {
push(S,p);
p = p->lchild;
}
else {
pop(S,p);
visit(p->data);
p = p->rchild;
}
}
}
다음 순서 반복:
// , :
Status postOrder(BiTree T, Status (*Visit)(TElemType e)) {
InitStack(S); p = T;
while(p || !StackEmpty(S)) {
while(p) {
push(S,p);
p = p->lchild;
}
if(!StackEmpty(S)) {
sn = top(S);
if(!sn->rchild || sn.rchildVisited) {
pop(S,p);
visit(p);
}
else {
sn.rchildVisited = 1;
p = sn->rchild;
}
}
}
}
References:
[1] 데이터 구조(C언어판) 엄울민 오위민 편저