/*************************************************
题目:求二叉树中节点的最大距离
距离就是节点到根节点的边数,最大距离必然是叶子节点间的距离
思路:
1.转化为子树上的解
2.递归遍历左右子树,计算左右子树的最长节点距离
3.更新最长节点距离
****************************************************/
struct Node
{
int data;
Node* pLchild;
Node* pRchild;
int nMaxLeft;//左子树最大距离
int nMaxRight;//右子树最大距离
};
void FindMaxLen(Node* proot)
{
//遍历到叶子节点返回
if(proot == NULL)return;
if(proot->pLchild == NULL)
proot->nMaxLeft = 0;
if(proot->pRchild ==NULL)
proot->nMaxRight =0;
if(proot->pLchild != NULL)//递归寻找左子树最大距离
FindMaxLen(proot->pLchild);
if(proot->pRchild != NULL)
FindMaxLen(proot->pRchild);
if(proot->pLchild != NULL)//计算左子树最长节点距离
{
int nMaxLen = 0;
if(proot->pLchild->nMaxLeft > proot->pRchild->nMaxRight)
nMaxLen = proot->pLchild->nMaxLeft;
else
nMaxLen = proot->pRchild->nMaxRight;
proot->nMaxLeft = nMaxLen + 1;
}
if(proot->pRchild != NULL)//计算右子树最长节点距离
{
int nMaxLen = 0;
if(proot->pRchild->nMaxLeft > proot->pRchild->nMaxRight)
nMaxLen = proot->pLchild->nMaxLeft;
else
nMaxLen = proot->pRchild->nMaxRight;
proot->nMaxLeft = nMaxLen + 1;
}
//更新最长距离
if(proot->nMaxLeft +proot->nMaxRight > nMaxLen)
nMaxLen = proot->nMaxLeft + proot->nMaxRight;
}求二叉树节点的最大距离
最新推荐文章于 2022-10-22 14:29:04 发布
2712

被折叠的 条评论
为什么被折叠?



