如果我们把二叉树看成一个图,父子之间的连线看成,姑且定义"距离"为两个之间边的个数。
求一颗二叉树中相距最远两个点之间的距离。
struct NODE
{
NODE *pLeft; //左子树
NODE *pRight;//右子树
int nMaxLeft;
int nMaxRight;
int chValue;
}BitTree;
int nMaxLen = 0;
void FindMaxLen(NODE * pRoot)
{
if(pRoot==NULL)
{
return;
}
if(pRoot->pLeft==NULL){
pRoot->nMaxLeft = 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 temp =0;
if(pRoot->pLeft->nMaxLeft>pRoot->pLeft->nMaxRight){
temp = pRoot->pLeft->nMaxLeft;
}
else{
temp = pRoot->pLeft->nMaxRight;
}
pRoot->nMaxLeft = temp+1;
}
if(pRoot->pRight!=NULL){
int temp =0;
if(pRoot->pRight->nMaxLeft>pRoot->pRight->nMaxRight){
temp = pRoot->pRight->nMaxLeft;
}
else{
temp = pRoot->pRight->nMaxRight;
}
pRoot->nMaxRight = temp+1;
}
if(pRoot->nMaxLeft+pRoot->nMaxRight>nMaxLen){
nMaxLen=pRoot->nMaxLeft+pRoot->nMaxLeft;
}
}