首先确定一下单路径的定义:某个结点的单路径就是只经过该结点且不同时包含其左右子树上的结点的路径
一、求连接二叉树的任意两个结点的路径的最大和
分析:对于二叉树上的每一个结点,求出经过它的路径的最大和,并更新这个最大和即可。经过它的最大和路径可能有三种情况:
1、其左子结点的最大单路径和大于0,且其右子结点的最大单路径和大于0,那么经过该结点的最大和路径通过该结点跨过左右子树
2、其左子结点和右子结点有且仅有一个最大单路径和大于0,那么经过该结点的最大和路径就是它的某一个(大于0)子结点的单路径上加上该结点
3、其左右子结点的最大单路径和都不大于0,那么最大和路径就是该结点本身
//求二叉树最大路径和,所求的路径位于任意两个结点之间
class Solution1 {
private:
int max_sum;
//返回以root为终点的路径最大和
int maxSinglePathSum(TreeNode* root)
{
if (root == NULL)
{
return 0;
}
int left = maxSinglePathSum(root->