第5章 树与二叉树
5.3 二叉树的遍历和线索二叉树
综合应用题 第20题
#include <stdio.h>
#include <stdlib.h> //malloc所在头文件
#include <iostream>
#define MaxSize 100
using namespace std;
typedef char ElemType;
typedef struct BiTNode{//声明树
ElemType data; //权值
struct BiTNode *lchild,*rchild;//左右孩子指针
}BiTNode,*BiTree;
BiTree PreInCreat(char a[],char b[],int l1,int h1,int l2,int h2)//利用前序序列和中序序列构造一棵树
{
int i=0;
BiTree root=(BiTNode *)malloc(sizeof(BiTNode));
root->data=a[l1];
for(i=l2;b[i]!=root->data;i++);
int llen=i-l2;
int rlen=h2-i;
if(llen)
root->lchild=PreInCreat(a,b,l1+1,l1+llen,l2,l2+llen-1);
else
root->lchild=NULL;
if(rlen)
root->rchild=PreInCreat(a,b,h1-rlen+1,h1,h2-rlen+1,h2);
else
root->rchild=NULL;
return root;
}
void BtreeToExp(BiTree root,int deep)
{
if(root==NULL) return;
else if(root->lchild==NULL&&root->rchild==NULL)
cout<<root->data;
else{
if(deep>1)cout<<"(";
BtreeToExp(root->lchild,deep+1);
cout<<root->data;
BtreeToExp(root->rchild,deep+1);
if(deep>1)cout<<")";
}
}
int main() {
char a[8]={'*','+','a','b','*','c','-','d'};
char b[8]={'a','+','b','*','c','*','-','d'};
BiTree B1;
B1=PreInCreat(a,b,0,7,0,7);
BtreeToExp(B1,1);
return 0;
}