LeetCode124. 二叉树中的最大路径和

主要代码:

int ans = INT_MIN;

int oneSideMax(TreeNode* root) {

    if (root == nullptr) return 0;

    int left = max(0, oneSideMax(root->left));

    int right = max(0, oneSideMax(root->right));

    ans = max(ans, left + right + root->val);

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

}


心得:   

    1.二叉树的  前中后序遍历  是个框架,根据题目特点,需要在递归过程中取值做相应计算

      ——框架的重点在于 : 二叉树遍历顺序(前中后遍历)、递归函数返回值 

      ——框架细节:当前递归所需保存的中间值,根据题目要求做中间计算、计算结果为:返回值和贯穿整个递归过程所需要维护的变量(本题为最大值ans)



    2.本题二叉树定义如下:

路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点

    ——路径由节点组成,节点为二叉树的节点,二叉树的创建为递归创建,故可把当前子树的最大值归到当前子树的根节点上(代码体现在返回值)

    ——本题为二叉树的路径问题、求最值(节点value累和)

    ————划分小段子路径:子树的子节点取大值归到子树根节点

    ————宏观来看整条路径,任意节点到任意节点,路径在二叉树中的最高节点的中序遍历取累和,不断的更新ans取最大值


    3.对于存在负数节点的处理:化为0,路径上表现为不经过此节点

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。