leetcode 1302. 层数最深叶子节点的和 C语言

隐身守侯 提交于 2020-02-03 18:03:02

给你一棵二叉树,请你返回层数最深的叶子节点的和。

 

示例:

输入:root = [1,2,3,4,5,null,6,7,null,null,null,null,8]
输出:15
 

提示:

树中节点数目在 1 到 10^4 之间。
每个节点的值在 1 到 100 之间。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
int g_maxDepth = 0;
int g_totalValue = 0;

void dfs(struct TreeNode* root, int depth)
{
    if (root == NULL) {
        return;
    }
    // 如果当前节点的depth大于maxDepth
    // 则更新depth和totalValue
    if (depth > g_maxDepth) {
        g_maxDepth = depth;
        g_totalValue = root->val;
    // 如果当前节点的depth大于maxDepth
    // 则累加totalValue
    } else if (depth == g_maxDepth) {
        g_totalValue += root->val;
    } // 如果当前节点的depth小于maxDepth,不处理直接跳过
    dfs(root->left, depth + 1);
    dfs(root->right, depth + 1);
}

int deepestLeavesSum(struct TreeNode* root){
    g_maxDepth = 0;
    g_totalValue = 0;
    dfs(root, 0);
    return g_totalValue;
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!