题目:
找一个二叉树的最大路径和,该二叉树没有其他的特征,元素大小val是整数,可正可负,输入根节点,输出最大路径和。
解题思路:
首先一条路径遍历到叶子节点的时候,两个叶子节点的根节点相同,也就是到其根节点的路径上节点的val的和是一样的,此时那个节点的值大,那么最大路劲就会在哪个路径上。这就是递归的最初思想,之后扩展到左右子树,唯一需要注意的是,节点的度不一定都是二,也可以是1.代码如下:
bool flag=false;//异常情况和正常情况下输出0区分开
int MaxPath(TreeNode* proot)
{
if(proot==NULL) return 0;
return pathCore(proot);
}
int pathCore(TreeNode* p)
{
int lesftsum=0;
int rightsum=0;
int maxsum=0;
if(p->left)
leftsum= pathCore( p->left);
if(p->right)
rightsum= pathCore(p->roght);
if(p->left&&p->right)
maxsum=leftsum>rightsum?leftsum:rightsum;
else if(p->left&&!p->right)
maxsum=p->left->val;
else if(!p->left&&p->right)
maxsum=p->right->val;
else
;
flag=1;
return maxsum+p->val;
}