答案 0 :(得分:4)
f(node, level):
if node is null then
return { Inf, -1 }
if isLeaf(node) then
return { level, node.value }
fleft <- f(node.left, level + 1)
fright <- f(node.right, level + 1)
fnode <- { min(fleft.first, fright.first), 0 }
if fnode.first = fleft.first then
fnode.second <- fnode.second + fleft.second
if fnode.first = fright.first then
fnode.second <- fnode.second + fright.second
return fnode
函数返回一对值,其中first
是最小叶级别,second
是此级别上叶元素的总和。
答案 1 :(得分:0)
你也可以使用地图,minLeafSum
是驱动功能,逻辑很简单。只需查看代码即可。
void getmin(map<int,vector<int>> &m,Node* root,int level)
{
if(root==NULL)
return;
if(root->left==NULL && root->right==NULL)
{
m[level].push_back(root->data);
return;
}
if(root->left!=NULL)
getmin(m,root->left,level+1);
if(root->right!=NULL)
getmin(m,root->right,level+1);
}
int minLeafSum(Node* root)
{
int ans=0;
map<int,vector<int>> m;
getmin(m,root,0);
auto it = m.begin();
for(int i=0; i< it->second.size() ;i++)
ans += it->second[i];
return ans ;
}