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

Posted oscar67

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了124. 二叉树中的最大路径和相关的知识,希望对你有一定的参考价值。

通过递归,判断以当前节点为根的树是否为最大值,然后取当前节点单条路径的最大值给父节点调用。

 技术分享图片

 

#include<iostream>
#include <vector>
#include <set>
#include <functional>
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <sstream>
#include <list>
#include <map>
#include <stack>
#include <algorithm>
#include<iomanip>

#define INT_MIN     (-2147483647 - 1) /* minimum (signed) int value */
#define INT_MAX       2147483647    /* maximum (signed) int value */

using namespace std;

 struct TreeNode {
     int val;
     TreeNode *left;
     TreeNode *right;
     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 };

 int maxPath = INT_MIN;
 int Max(int a, int b, int c,int d)
 {
	 if (a<b)
		 a = b;
	 if (c < d)
		 c = d;
	 return a > c ? a : c;
 }
 int Max(int a, int b, int c)
 {
	 if (a<b)
		 a = b;
	 return a > c ? a : c;
 }
 int maxPathSum2(TreeNode* root) {
	 if (root == nullptr)
		 return 0;

	 int lMax=0, rMax = 0;
	 if (root->left != nullptr)
		 lMax = maxPathSum2(root->left);
	 if (root->right != nullptr)
		 rMax = maxPathSum2(root->right);

	 int max = Max(root->val, root->val + lMax, root->val + rMax, root->val + rMax + lMax);
	 int pathmax = Max(root->val, root->val + lMax, root->val + rMax);

	 if (max > maxPath)
		 maxPath = max;

	 return pathmax > 0 ? pathmax : 0;
 }
 int maxPathSum(TreeNode* root) {
	 if (root == nullptr)
		 return 0;
	 maxPathSum2(root);
	 return maxPath;
 }
int main(int argc, char** args)
{
	TreeNode root(-10);
	root.left = new TreeNode(9);
	root.right = new TreeNode(20);
	root.right->left = new TreeNode(15);
	root.right->right = new TreeNode(7);
	cout << maxPathSum(&root) << endl;
	system("pause");
	return 0;
}

  

以上是关于124. 二叉树中的最大路径和的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 124.二叉树中的最大路径和

LeetCode 124. 二叉树中的最大路径和 | Python

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

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

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

力扣-124-二叉树中的最大路径和