第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

124. Binary Tree Maximum Path Sum - 二叉樹(shù)中的最大路徑和

標(biāo)簽:
Java

1 描述

给定一个非空二叉树,返回其最大路径和。

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

用例


输入: [1,2,3]

       1
      / \
     2   3

输出: 6
输入: [-10,9,20,null,null,15,7]

   -10
   / \
  9  20
    /  \
   15   7

输出: 42

解析

通过 &max 来记录全局最大值,通过返回ret来记录递归返回的值

二叉树 abc,a 是根结点(递归中的 root),bc 是左右子结点(代表其递归后的最优解)。
最大的路径,可能的只有三种路径情况:

    a
   / \
  b   c
  1. b + a + c。
  2. b + a + a父
  3. a + c + a父

其中情况 1,表示如果不联络父结点的情况,或本身是根结点的情况。
这种情况是没法递归的,但是结果有可能是全局最大路径和。
情况 2 和 3,递归时计算 a+b 和 a+c,选择一个更优的方案返回,也就是上面说的递归后的最优解啦。
另外结点有可能是负值,最大和肯定就要想办法舍弃负值(max(0, x))(max(0,x))。

但是上面 3 种情况,无论哪种,a 作为联络点,都不能够舍弃。

暴力枚举法

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

int result = -2147483648;

int helper(struct TreeNode* root) {
    if (root == NULL) return 0; 
    int left = helper(root->left);
    int right = helper(root->right);
    int threeNodeSum = root->val + left + right;
    int twoNodeSum = root->val + max(left, right);
    int oneNodeSum = root->val;
    int ret = max(twoNodeSum, oneNodeSum);
    int currentMax = max(ret, threeNodeSum);
    result = max(currentMax, result);
    return ret;
}

int max(int a, int b) {
    return a > b ? a : b; 
}

int maxPathSum(struct TreeNode* root){
    result = -2147483648;
    int temp = helper(root);
    return result;
}

分析

#define max(a, b) ((a) > (b) ? (a) : (b))

int maxPath = INT_MIN;

int dfs(struct TreeNode *root) {
	if (root == NULL) {
		return 0;
	}

	// 左子树的最大和
	int left = dfs(root->left);
	// 右子树的最大和
	int right = dfs(root->right);
	// 当前节点路径(不需要联系父结点,或本身就已经是根结点而无父节点)的最大值 VS 当前全局最大值
	maxPath = max(left + right + root->val, maxPath);
	// 需要联系父节点,因此只返回子树最大分支
	return max(0, max(left, right) + root->val);

}

int maxPathSum(struct TreeNode *root) {
	// 初始化为最小可能的整数
	maxPath = INT_MIN;
	// 深度优先遍历
	dfs(root);
	return maxPath;
}

欢迎关注全是干货的:JavaEdge

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
JAVA開(kāi)發(fā)工程師
手記
粉絲
1.4萬(wàn)
獲贊與收藏
1478

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶(hù)
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消