当前位置:网站首页>力扣练习——47 二叉树中的最大路径和
力扣练习——47 二叉树中的最大路径和
2022-08-06 13:13:00 【qq_43403657】
47 二叉树中的最大路径和
1.问题描述
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
示例 1:
输入: [1,2,3]
1
/ \
2 3
输出: 6
示例 2:
输入: [-10,9,20,null,null,15,7]
-10
/ \
9 20
/ \
15 7
输出: 42
可使用以下main函数:
#include
#include
#include
#include
using namespace std;
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(NULL), right(NULL) {}
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};
TreeNode* inputTree()
{
int n,count=0;
char item[100];
cin>>n;
if (n==0)
return NULL;
cin>>item;
TreeNode* root = new TreeNode(atoi(item));
count++;
queue<TreeNode*> nodeQueue;
nodeQueue.push(root);
while (count<n)
{
TreeNode* node = nodeQueue.front();
nodeQueue.pop();
cin>>item;
count++;
if (strcmp(item,"null")!=0)
{
int leftNumber = atoi(item);
node->left = new TreeNode(leftNumber);
nodeQueue.push(node->left);
}
if (count==n)
break;
cin>>item;
count++;
if (strcmp(item,"null")!=0)
{
int rightNumber = atoi(item);
node->right = new TreeNode(rightNumber);
nodeQueue.push(node->right);
}
}
return root;
}
int main()
{
TreeNode* root;
root=inputTree();
int res=Solution().maxPathSum(root);
cout<<res<<endl;
}
2.输入说明
首先输入结点的数目n(注意,这里的结点包括题中的null空结点)
然后输入n个结点的数据,需要填充为空的结点,输入null。
3.输出说明
输出一个整数,表示结果。
4.范例
输入
7
-10 9 20 null null 15 7
输出
42
5.代码
#include <iostream>
#include <queue>
#include <cstdlib>
#include <cstring>
using namespace std;
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(NULL), right(NULL) {
}
TreeNode(int x) : val(x), left(NULL), right(NULL) {
}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {
}
};
TreeNode* inputTree()
{
int n, count = 0;
char item[100];
cin >> n;
if (n == 0)
return NULL;
cin >> item;
TreeNode* root = new TreeNode(atoi(item));
count++;
queue<TreeNode*> nodeQueue;
nodeQueue.push(root);
while (count < n)
{
TreeNode* node = nodeQueue.front();
nodeQueue.pop();
cin >> item;
count++;
if (strcmp(item, "null") != 0)
{
int leftNumber = atoi(item);
node->left = new TreeNode(leftNumber);
nodeQueue.push(node->left);
}
if (count == n)
break;
cin >> item;
count++;
if (strcmp(item, "null") != 0)
{
int rightNumber = atoi(item);
node->right = new TreeNode(rightNumber);
nodeQueue.push(node->right);
}
}
return root;
}
int ans = INT_MIN;//初始值设置为最小
int dfs(TreeNode *root)
{
if (root == NULL)
return 0;
int left = dfs(root->left);//左子树提供的最大路径和
int right = dfs(root->right);//右子树提供的最大路径和
int interSum = root->val + left + right;//计算当前子树内部最大的路径和
ans = max(ans, interSum);
int outerSum = root->val + max(0, max(left, right));//计算当前子树向外提供的最大值
return max(outerSum,0);
}
int maxPathSum(TreeNode *root)
{
//递归解决问题
dfs(root);
return ans;
}
int main()
{
TreeNode* root;
root = inputTree();
int res = maxPathSum(root);
cout << res << endl;
}
边栏推荐
猜你喜欢

链表 | 反转链表 | leecode刷题

GD32E103 USB官方库 + STM32CubeMX

如何用 ONES 管理工单,快速响应用户反馈?|2分钟了解 ONES

从没见过能把高并发拆解的这么详细!阿里巴巴这份堪称神级的“高并发”教程太香了

智慧城市系列-1

Multiple knapsack problem ← scale hour can be transformed into 0-1 knapsack problem

对话小牛电动CEO李彦:我们要做有独特价值主张的产品

Wechat video account live broadcast room involving pornography

链表 | 双指针法 | 删除链表的倒数第 N 个结点 | leecode刷题笔记

速览muduo组成结构
随机推荐
Mingdeyang FmcAd9144 Product Manual
Yizhiwei Digital Twin Smart Port | Create a "brain" for intelligent dispatching and comprehensive management and control, and realize a "new upgrade" of port construction
Kubernetes日常故障解决
cubase 安装教程
LeetCode 897. Searching Trees in Ascending Order
SQL图解面试题:如何找到破产玩家?(交叉连接)
解决创建虚拟机时No DEFAULT or UI configuration directive found问题
[极客大挑战 2019]BabySQL 1
SAP 特征 Classification
NAT 网络地址转换
安全第六天课后练习
智慧城市系列-1
Security on the sixth day practice after class
Shardingsphere 强制主库查询
微信小程序原生将两张图片合成一张并保存至手机中
One article to understand what is kubernetes Service
ReentrantLock study notes
How to recover EOS keys after being stolen?
Wechat video account live broadcast room involving pornography
软件设计原则