繁体   English   中英

二叉树中最低级别的所有叶节点的总和

[英]Sum of all leaf nodes at minimum level in binary tree

如何在二叉树中以最小级别计算所有叶节点的总和。 如果不存在树,则应返回-1。

例:

二叉树

对于上述二叉树,返回100(40 + 60)

(图片来源: GeeksForGeeks

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是该级别上叶子元素的总和。

您也可以使用地图, 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 ;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM