二叉树的层次遍历

#include<iostream>
#include<stdlib.h>
#define maxSize 100
using namespace std;
typedef struct BTNode
{
	char data;
	struct BTNode *lchild;
	struct BTNode *rchild;
}BTNode;
void Visit(BTNode *p)//访问结点
{
	cout<<p->data;
}
void CreateBiTree(BTNode *&T,string preorder,string inorder)//创建二叉树
{
	if(preorder.length()==0)
	{
		T=NULL;
		return ;
	}
	char r=preorder[0];
	int id=inorder.find(r);
	
	string l_inorder=inorder.substr(0,id);
	string r_inorder=inorder.substr(id+1);
	
	int l_length=l_inorder.length();
	int r_length=r_inorder.length();
	
	string l_preorder=preorder.substr(1,l_length);
	string r_preorder=preorder.substr(1+l_length);
	
	T=(BTNode*)malloc(sizeof(BTNode));
   	if(T!=NULL)
    {
	   T->data=r;
       CreateBiTree(T->lchild,l_preorder,l_inorder);
	   CreateBiTree(T->rchild,r_preorder,r_inorder);
    }
}
void level(BTNode *p)//层次遍历 
{
	int front,rear;
	BTNode *que[maxSize];
	front=rear=0;
	BTNode *q;
	if(q!=NULL)
	{
		rear=(rear+1)%maxSize;
		que[rear]=p;
		while(front!=rear)
		{
			front=(front+1)%maxSize;
			q=que[front];
			Visit(q);
			if(q->lchild!=NULL)
			{
				rear=(rear+1)%maxSize;
				que[rear]=q->lchild;
			}
			if(q->rchild!=NULL)
			{
				rear=(rear+1)%maxSize;
				que[rear]=q->rchild;
			 } 
		 } 
	 } 
}
int main()
{
	string pre="ABCDEFGH";//前序 
	string in="CBEDFAHG";//中序 
	BTNode *T;
	CreateBiTree(T,pre,in);
    level(T);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值