二叉树遍历模板


以下是复习默写记录的模板,为以后回顾模板方便

结构化定义

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);
		}
	}
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值