zoukankan      html  css  js  c++  java
  • leetcode124二叉树最大路径和

    第一选择是将其转化成图用动态规划,但这样还是太麻烦

    使用递归的思路,对于当前的节点root,分别求左右孩子到当前节点的单项路径权值最大的路径权值,然后记包含当前节点的路径权值为 path_price=root->val+left_gain+right_gain,取sum_max和他较大的;

    返回左右孩子权值最大的单向路径(只往上不拐弯)的权值(这需要好好理解,因为更新权值的式子是root->val+left_gain+right_gain,即从左子路到根再到右子路的一条式子,所以计算left_gain与right_gain需要返回这样的值)

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        int maxPathSum(TreeNode* root) {
            //化为带权的图,求最大路径
            //递归,分解问题
            max_gain(root);
            return sum_max;
        }
        int max_gain(TreeNode* root){
            if(root==NULL) return 0;
            
            //0代表不选择该路径
            int left_gain=max(max_gain(root->left),0);
            int right_gain=max(max_gain(root->right),0);
            
            int path_price=root->val+left_gain+right_gain;
            sum_max=max(path_price,sum_max);
            
            //返回值//左右选一条是因为递归时,需要从子节点选一条路径到当前根节点;而当前最大值由sum_max记录
            return root->val+max(left_gain,right_gain);
        }
    private:
        int sum_max=INT_MIN;
    };

  • 相关阅读:
    模式应用:自定义匹配
    WPF架构学习总结
    脑子是用来想事的,不是记事的
    参加峰会“金点子”的材料
    我所想的GIX4的权限
    Process, Thread, STA, MTA, COM object
    JAVA 游戏分享 “是男人就下100层”
    关于静态方法和实例方法的一些误区。
    软区域
    Dispose, Finalization, and Resource Management
  • 原文地址:https://www.cnblogs.com/joelwang/p/11077337.html
Copyright © 2011-2022 走看看