二叉树之求二叉树中最大路径和
LeetCode中一道求二叉树中最大路径和的题目,一起来复习下二叉树的遍历。以如图所示二叉树为例
1、二叉树前序遍历 根-》左子树-》右子树
void PreorderErgodic(TwoTree* p)
{
if (p != NULL)
{
printf("%d,",p->value);
PreorderErgodic(p->left);
PreorderErgodic(p->right);
}
}
//1,2,3,4,5,6,7,8,9,10,11,
2、二叉树中序遍历 左子树-》根-》右子树
void MiddleOrderErgodic(TwoTree* p)
{
if (p != NULL)
{
MiddleOrderErgodic(p->left);
printf("%d,",p->value);
MiddleOrderErgodic(p->right);
}
}
//4,3,2,6,5,8,7,1,10,9,11,
3、 二叉树后序遍历 左子树-》右子树-》根
void PostorderErgodic(TwoTree* p)
{
if (p != NULL)
{
PostorderErgodic(p->left);
PostorderErgodic(p->right);
printf("%d,",p->value);
}
}
//4,3,6,8,7,5,2,10,11,9,1,
4、现在我来看看求最大路径和,求最大,当然是要对比左右子树最大一个,然后加上自己。代码如下
int MaxPath(TwoTree* p)
{
if (NULL == p)
{
return 0;
}
int left = MaxPath(p->left);
int right = MaxPath(p->right);
return max(left, right) + p->value;
}
//23 8-》7-》5-》2-》1
可以看出,这是个后序遍历,先分别遍历左子树、右子树,对比最大子树值,返回最大子树+自己的值。
还没有评论,来说两句吧...