第5章 树与二叉树
5.3 二叉树的遍历和线索二叉树
综合应用题 第19题
![在这里插入图片描述](https://img-blog.csdnimg.cn/6fc2a1caba87483daf425ee45c890787.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAb25lIGRheV8xOTAzMDQ=,size_20,color_FFFFFF,t_70,g_se,x_16)
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#define MaxSize 100
using namespace std;
typedef int ElemType;
typedef struct BiTNode{
ElemType weight;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree PreInCreat(int a[],int b[],int l1,int h1,int l2,int h2)
{
int i=0;
BiTree root=(BiTNode *)malloc(sizeof(BiTNode));
root->weight=a[l1];
for(i=l2;b[i]!=root->weight;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;
}
int WPL(BiTree root,int deep)
{
static int wpl=0;
if(root->lchild==NULL&&root->rchild==NULL)
wpl+=root->weight*deep;
if(root->lchild!=NULL)
WPL(root->lchild,deep+1);
if(root->rchild!=NULL)
WPL(root->rchild,deep+1);
return wpl;
}
int main() {
int a[5]={4,2,1,3,5};
int b[5]={1,2,3,4,5};
BiTree B1;
B1=PreInCreat(a,b,0,4,0,4);
cout<<WPL(B1,0);
return 0;
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/6d9ea62cd6054203aad393759fd9800e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAb25lIGRheV8xOTAzMDQ=,size_20,color_FFFFFF,t_70,g_se,x_16)