struct Node
{
Node* pLeft; //左子树
Node* pRight; //右子树
int nMaxLeft; //左子树中的最长距离
int nMaxRight; //右子树中的最长距离
char chValue; //该节点的值
};
int nMaxLen = 0;
//寻找树中最长的两段距离
void findMaxLen(Node* pRoot)
{
//遍历到叶子节点,则返回
if (pRoot == NULL)
{
return;
}
//如果左子树为空,那么该节点的左边最长距离为0
if (pRoot->pLeft == NULL)
{
pRoot->nMaxLeft = 0;
}
//如果右子树为空,那么该节点的右边最长距离为0
if (pRoot->pRight == NULL)
{
pRoot->nMaxRight = 0;
}
//如果左子树不为空,递归寻找左子树最长距离
if (pRoot->pLeft != NULL)
{
findMaxLen(pRoot->pLeft);
}
//如果右子树不为空,递归寻找右子树最长距离
if (pRoot->pRight != NULL)
{
findMaxLen(pRoot->pRight);
}
//计算左子树最长节点距离
if (pRoot->pLeft != NULL)
{
int nTemp;
if (pRoot->pLeft->nMaxLeft > pRoot->pLeft->nMaxRight)
{
nTemp = pRoot->pLeft->nMaxLeft;
}
else
nTemp = pRoot->pLeft->nMaxRight;
pRoot->nMaxLeft = nTemp+1;
}
//计算右子树最长节点距离
if (pRoot->pRight != NULL)
{
int nTemp;
if (pRoot->pRight->nMaxLeft > pRoot->pRight->nMaxRight)
{
nTemp = pRoot->pRight->nMaxLeft;
}
else
nTemp = pRoot->pRight->nMaxRight;
pRoot->nMaxRight = nTemp+1;
}
//更新最长距离
if (pRoot->nMaxLeft+pRoot->nMaxRight > nMaxLen)
{
nMaxLen = pRoot->nMaxLeft+pRoot->nMaxRight;
}
}
07-15
07-15
07-15
07-15
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交