leetcode做题笔记124. 二叉树中的最大路径和

二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。

路径和 是路径中各节点值的总和。

给你一个二叉树的根节点 root ,返回其 最大路径和 。

思路一:递归

int ans;
int dfs(struct TreeNode*root){
    if(root==NULL)return 0;
    int left = fmax(0,dfs(root->left));
    int right = fmax(0,dfs(root->right));
    ans = fmax(ans,left+right+root->val);

    return fmax(left,right)+root->val;

}



int maxPathSum(struct TreeNode* root){ 
    ans = INT_MIN;
    dfs(root);
    return ans;
}

分析:

本题要向下不断递归二叉树,将左右子树中最大值设为ans最后输出ans即最大路径和,ans先设置为int_min方便后续操作,dfs函数返回fmax(left,right)+root->val;

总结:

本题考察递归查找路径问题,将二叉树递归调用左右子树操作熟悉后可解决

你可能感兴趣的:(递归,二叉树,leetcode,笔记,深度优先)