以下是複習默寫記錄的模板,爲以後回顧模板方便
結構化定義
typedef struct node{
elemType data; //數據域
struct node *lchild, *rchild; //左右孩子指針
}Btree;
遞歸遍歷
遞歸先序遍歷
//遞歸先序遍歷
void PreOrder(Btree T){
visit(T);
preOrder(T->lchild);
preOrder(T->rchild);
}
遞歸中序遍歷
//遞歸中序遍歷
void InOrder(Btree T){
InOrder(T->lchild);
visit(T);
InOrder(T->rchild);
}
遞歸後序遍歷
//遞歸後序遍歷
void PostOrder(Btree T){
PostOrder(T->lchild);
PostOrder(T->rchild);
visit(T);
}
非遞歸遍歷
非遞歸先序遍歷
//非遞歸先序遍歷
void PreOrder(Btree T){
InitStack(S); Btree p = T;
while(p || !IsEmpty(S)){
if(p){
visit(p);
push(S, p);
p = p->lchild;
}
else{
pop(S,p);
p = p->rchild;
}
}
}
非遞歸中序遍歷
// 非遞歸中序遍歷
void InOrder(Btree T){
InitStack(S); Btree p = T;
while(p || !IsEmpty(S)){
if(p){
push(S, p);
p = p->lchild;
}
else {
pop(S, p);
visit(p);
p = p->rchild;
}
}
}
非遞歸後序遍歷
// 非遞歸後續遍歷
void PostOrder(Btree T){
InitStack(S); Btree p = T, b = NULL;
while(p || !IsEmpty(S)){
if(p){
Push(S, p);
p = p->lchild;
}
else {
GetTop(S, p);
if(p->rchild && p->rchild!=r){
p = p->rchild;
Push(S, p);
p = p->lchild;
}
else{
Pop(S, p);
visit(p);
b = p;
p = NULL;
}
}
}
}
層次遍歷
//層次遍歷
void levelOrder(Btree T){
InitQueue(Q);
Btree p;
EnQueue(Q, T);
while(!IsEmpty(Q)){
DeQueue(Q, p);
visit(p);
if(p->lchild != null){
EnQueue(Q, p->lchild);
}
if(p->rchild != null){
EnQueue(Q, p->rchild);
}
}
}