⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 expe2.cpp

📁 一些数据结构的源码
💻 CPP
字号:
#include<iostream>
using namespace std;
#define elemtype char
#define NULL 0
void (* p)(elemtype);
typedef struct bitnode
{
	elemtype data;
	struct bitnode * lchild,* rchild;
}bitnode,* bitree;

#include "level.cpp"
#define stack_init_size 30
#define stackincrement 10
typedef struct 
{
	bitree *base,*top;
	int stacksize;
}sqstack;

void stackinit(sqstack & S)
{
   S.base=(bitree*)malloc(stack_init_size*
   sizeof(bitree));
   S.top=S.base;
   S.stacksize=stack_init_size;
}

void push(sqstack &S,bitree &e)
{
	if(S.top-S.base==S.stacksize)
	{
	    S.base=(bitree*)realloc(S.base,
        (S.stacksize+stackincrement)*
        sizeof(bitree));
		S.top=S.base+S.stacksize;
		S.stacksize+=stackincrement; 
	}//if
	*S.top=e;S.top+=1;
}//push

int stackempty(const sqstack &S)
{
	if(S.top==S.base) return 1;
	else return 0;
}

int pop(sqstack &S,bitree &e)
{
   if(!stackempty(S)) {S.top-=1;e=*S.top;return 1;}
   else return 0;
}

int gettop(sqstack S,bitree &p)
{
   if(!stackempty(S)) p=*(S.top-1);return 1;
}

void visit(elemtype e)
{
	cout<<e;
}

void dcreatebitree(bitree &T)
{
	char ch;cin>>ch;
    if(ch=='o') T=NULL;
    else
	 {
		T=(bitree)malloc(sizeof(bitnode));
	    T->data=ch;dcreatebitree(T->lchild);
		dcreatebitree(T->rchild); 
	}  
}


int fdcreatebitree(bitree &T)
{
	elemtype ch;bitree p;sqstack S;
    stackinit(S);cin>>ch;
    if(ch=='o') 
	{
		T=NULL;return 1;
	}
    T=(bitree)malloc(sizeof(bitnode));
    T->data=ch;p=T;cin>>ch;
    do
	{
		while(ch!='o')
		{
         p->lchild=(bitree)malloc(sizeof
(bitnode));
	  push(S,p);p=p->lchild;
 	  p->data=ch;cin>>ch;
		}
    p->lchild=NULL;
//向左走到底
//右走一步
    cin>>ch;
   while(ch=='o'&&!stackempty(S))
   {
	p->rchild=NULL;pop(S,p);cin>>ch;
   }
    if(ch=='o') p=p->rchild=NULL;
   else 
   {
	   p->rchild=(bitree)malloc(sizeof(bitnode));
      p=p->rchild;p->data=ch;cin>>ch;
   }
	}while(p);//do_while
return 1;
}//createbitree

void Preordertraverse(bitree T,void (* visit)(elemtype e))
{  
	if(T)
	{
		visit(T->data);
		Preordertraverse(T->lchild,p);
		Preordertraverse(T->rchild,p);
	}  
}
void Inordertraverse(bitree T,void (* visit)(elemtype e))
{   
	if(T)
	{
		Inordertraverse(T->lchild,p);
		visit(T->data);
		Inordertraverse(T->rchild,p);
	}  
}
void Lordertraverse(bitree T,void (* visit)(elemtype e)) 
{ 
	if(T)
	{
		Lordertraverse(T->lchild,p);
        Lordertraverse(T->rchild,p);
		visit(T->data);
	}  
}

void main()
{
	p=visit;  bitree T;
    int i;
    cout<<"请选择要进行的操作:0为递归建立二叉树,1为非递归建立二叉树"<<endl;
    cin>>i;
    if(i==0)
	{
	  cout<<"请输入数据:"<<endl;
      dcreatebitree(T);
	}
    else if(i==1)
	{
	  cout<<"请输入数据:"<<endl;
      fdcreatebitree(T);
	}
	int j;
		while(1)
	{
    	cout<<"请选择要遍历的类型:1为先序,2为中序,3为后序,4为层次,0为退出"<<endl;
		cin>>j;
		if(j==1)
		{
           cout<<endl<<"先序序列:"<<endl;
           Preordertraverse(T,p);
		   cout<<endl;
		}
		else if(j==2)
		{
            cout<<endl<<"中序序列:"<<endl;
            Inordertraverse(T,p);
			cout<<endl;
		}
		else if(j==3)
		{
            cout<<endl<<"后序序列:"<<endl;
            Lordertraverse(T,p);
			cout<<endl;
		}
		else if(j==4)
		{
           cout<<endl<<"层次遍历序列为:"<<endl;
           leordertraverse(T,p);
		   cout<<endl;
		}
		else if(j==0)break;
	}
    cout<<endl;
}  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -