层次遍历二叉树

用队列从上到下,从左到右遍历

遍历二叉树的算法中基本操作是访问结点,对含n个结点的二叉树遍历,其时间复杂度均为O(n).

#include<stdio.h>
#include<stdlib.h>
int rear=0,front=0;
typedef struct node {
	int data;
	struct node* lchild,*rchild;
} BiTNode,*BiTree;
void initTree(BiTree* t) {
	*t=(BiTNode*)malloc(sizeof(BiTNode));
	(*t)->data=1;

	(*t)->lchild=(BiTNode*)malloc(sizeof(BiTNode));
	(*t)->lchild->data=2;
	
	(*t)->rchild=(BiTNode*)malloc(sizeof(BiTNode));
	(*t)->rchild->data=3;
	
	(*t)->lchild->lchild=(BiTNode*)malloc(sizeof(BiTNode));
	(*t)->lchild->lchild->data=4;
	(*t)->lchild->lchild->lchild=NULL;
	(*t)->lchild->lchild->rchild=NULL;
	
	(*t)->lchild->rchild=(BiTNode*)malloc(sizeof(BiTNode));
	(*t)->lchild->rchild->data=5;
	(*t)->lchild->rchild->lchild=NULL;
	(*t)->lchild->rchild->rchild=NULL;
	
	(*t)->rchild->lchild=(BiTNode*)malloc(sizeof(BiTNode));
	(*t)->rchild->lchild->data=6;
	(*t)->rchild->lchild->lchild=NULL;
	(*t)->rchild->lchild->rchild=NULL;
	
	(*t)->rchild->rchild=(BiTNode*)malloc(sizeof(BiTNode));
	(*t)->rchild->rchild->data=7;
	(*t)->rchild->rchild->lchild=NULL;
	(*t)->rchild->rchild->rchild=NULL;
}
void displayElem(BiTNode* a){
	printf("%d ",a->data);
}
void enQueue(BiTree* d,BiTree n){
	d[rear++]=n;
}
BiTNode* deQueue(BiTree* d){
	return d[front++];
}
int main(){
	BiTree t;
	initTree(&t);
	BiTNode* q;
	BiTNode* a[10];
	enQueue(a,t);
	while(front<rear){
		q=deQueue(a);
		displayElem(q);
		if(q->lchild)
		enQueue(a,q->lchild);
		if(q->rchild)
		enQueue(a,q->rchild);
	}
}
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试
应支付0元
点击重新获取
扫码支付

支付成功即可阅读