一棵二叉树,其节点的编号用数组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; }