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

时间:2017-02-26 18:31:32

标签: algorithm data-structures tree binary-tree

如何计算二叉树中最小级别的所有叶节点的总和。如果没有树,那么它应该返回-1。

示例:

Binary Tree

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

(图片来源:GeeksForGeeks

2 个答案:

答案 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 ;
}