一棵二叉树,其节点的编号用数组A表示,比如A[5]={3,1,7,9,5},表示有5个节点
每个节点有对应的权值,用数组B表示,比如B[5]={8,2,10,4,6}。
根据给定的编号,构建一棵二叉树。
要求根节点的编号比其左子树和右子树的编号都小
比如针对上述的A,第1层的根结点只能选1
这样编号1左边的这些编号为其左子树的编号集合,即A'={3}
这样编号1右边的这些编号为其右子树的编号集合,即B'={7,9,5}
依次类推,可以得到如下这样一棵二叉树
对应的权值二叉树为右图所示
求权值二叉树中,每个数与对应层数相乘的累加和
2*1+8*2+6*2+10*3+4*4=76
#include<iostream>
using namespace std;
const int maxn=10000;
int n;
int a[maxn];
int b[maxn];
int f(int l,int r,int depth){
if(_____(1)______)
return 0;
int min=maxn,mink;
for(int i=l;i<=r;i++){
if(min>a[i]){
min=a[i];
_____(2)______;
}
}
int lres=f(l,mink-1,depth+1);
int rres=_______(3)______;
return ______(4)____+depth*b[mink];
}
int main( ){
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
cin>>b[i];
cout<<____(5)_____<<endl;
return 0;
}