# 树的简单应用

 #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;
}


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

## 字典树简介和简易应用

1、背景         词汇搜索、词频统计等字符串操作，是搜索引擎、文本处理系统等经常使用的业务，现在假设有这么一个简单的文本处理例子：有一篇10000个词的文章，要查出单词“was”在这篇文章中出...
• ly01kongjian
• 2013年03月31日 16:15
• 4019

## 简单树匹配（STM）及其应用举例

（一）简单树匹配 简单树匹配（Simple Tree Matching，  STM）的目标是找到两棵树间的最大匹配。两棵树间的最大匹配定义如下： 设A和B是两棵树，而i和j分别是A和B中的两个节点...
• l294265421
• 2015年12月19日 17:17
• 2128

## 数据结构之树的应用

• Arvin_success
• 2015年09月09日 23:39
• 264

## 树的直径 （树上的最长路）

• lp_opai
• 2015年05月02日 09:25
• 514

## AVL树，红黑树，B树，B+树，Trie树都分别应用在哪些现实场景中

• mengfanteng
• 2016年05月18日 11:26
• 647

## 数据结构之几种简单树的区别

• a6833916180
• 2016年06月07日 18:45
• 1072

## 二叉树的遍历的应用

• weichanjuan3
• 2015年07月27日 21:37
• 989

## 栈的简单应用（初学）

Description 四月一日快到了，Vayko想了个愚人的好办法——送礼物。嘿嘿，不要想的太好，这礼物可没那么简单，Vayko为了愚人，准备了一堆盒子，其中有一个盒子里面装了礼物。盒子里面可...
• hz18790581821
• 2016年08月07日 09:34
• 253

## 树与等价类

• sinat_32561655
• 2017年05月05日 15:17
• 568

## 简单树组织数据格式化为标准树组织数据

• GISShiXiSheng
• 2016年12月13日 07:20
• 574

举报原因： 您举报文章：树的简单应用 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)