# 树的简单应用

 #include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
typedef struct BNode
{
char data;              //数据域
struct BNode *l;        //左孩子指针
struct BNode *r;        //右孩子指针
}BTNode;
typedef BTNode *Tree;
void CreatexxTree(Tree *root)//前序建树
{
char ch;
cin>>ch;
if(ch=='#')
*root=NULL;
else{
*root=new BTNode;
(*root)->data=ch;
CreatexxTree(&((*root)->l));
CreatexxTree(&((*root)->r));
}
}
void Preorder(Tree root)//前序遍历
{
if(root!=NULL)
{
cout<<root->data;
Preorder(root->l);
Preorder(root->r);
}
}
void Inorder(Tree root)//中序建树
{
if(root!=NULL)
{
Inorder(root->l);
cout<<root->data;
Inorder(root->r);
}
}
void Postorder(Tree root)//后序建树
{
if(root!=NULL)
{
Postorder(root->l);
Postorder(root->r);
cout<<root->data;
}
}
bool DeletePostTree(Tree &root)//后序毁树
{
if(root==NULL)
return true;
else
{DeletePostTree(root->l);
DeletePostTree(root->r);
delete root;
return true;
}
return false;
}

int PostTreeDepth(Tree root)//
{
int hl,hr,max1;
if(root!=NULL)
{
hl=PostTreeDepth(root->l);
hr=PostTreeDepth(root->r);
max1=hl>hr?hl:hr;
return (max1+1);
}
else
return 0;

}
void levelTree(Tree T)
{
vector<BTNode*> vec;
vec.push_back(T);
int cur=0;
int en=1;
while(cur < vec.size())
{
en=vec.size();
while(cur<en)
{
cout<<vec[cur]->data<<' ';
if(vec[cur]->l)
vec.push_back(vec[cur]->l);
if(vec[cur]->r)
vec.push_back(vec[cur]->r);
cur++;
}
}
}
char Prestr[20]="ABCDEFGHIJKLM",Instr[20]="CBEFDGAJIHLKM",Postr[20]="CFEGDBJILMKHA";
void PreInCreateTree(Tree &root,int Pre,int In,int TreeLen)
{
if(TreeLen<=0)
{
root=NULL;
return ;
}
else
{
root=new BTNode;
root->data=Prestr[Pre];
int index=strchr(Instr,Prestr[Pre])-Instr;
int Lenf=index-In;
PreInCreateTree(root->l,Pre+1,In,Lenf);
int Lenr=TreeLen-1-Lenf;
PreInCreateTree(root->r,Pre+Lenf+1,index+1,Lenr);
}
}

void PostInCreateTree(Tree &root,int In,int Post,int TreeLen){
if(TreeLen <= 0)
{
root = NULL;
return;
}
else
{
root = new BTNode;
root->data = Postr[Post];
int index = strchr(Instr,Postr[Post]) - Instr;
int Lenf = index - In;
PostInCreateTree(root->l,In,Post - (TreeLen - 1 - Lenf) - 1,Lenf);
int Lenr = TreeLen - 1 - Lenf;
PostInCreateTree(root->r,index + 1,Post-1,Lenr);
}
}

int main()
{   //freopen("a.txt","r",stdin);
// cin.getline(Prestr,20);
//cin.getline(Instr,20);
// cin.getline(Postr,20);
Tree root;
//PreInCreateTree(root,0,0,strlen(Instr));
// PostInCreateTree(root,0,strlen(Postr)-1,strlen(Instr));
//CreatexxTree(&root);
PostInCreateTree(root,0,strlen(Postr)-1,strlen(Instr));
Preorder(root);
cout<<endl;
Inorder(root);
cout<<endl;
Postorder(root);
cout<<endl;
if(DeletePostTree(root))
cout<<"内存已回收\n";
return 0;
}


• 本文已收录于以下专栏：

## HDU 2795 Billboard //线段树简单应用

Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot...

## hdu1166(简单线段树应用，求区间和)

/* hdu1166(求区间和) */ #include #include #define MAX 50000 struct node{ int l,r,num; };...

## NYoj 63 小猴子的下落[满二叉树简单应用]

/* NYOJ 63 小猴子的下落. 由此题可知：对于完全二叉树和满二叉树完全可以用顺序结构实现. 读严慧敏的数据结构(C语言)可知： 顺序存储结构只适用于完全二叉树，但是对于某些度不...

举报原因： 您举报文章：深度学习：神经网络中的前向传播和反向传播算法推导 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)