求二叉树中节点的最大距离

来源:互联网 发布:宝马400m轮毂数据 编辑:程序博客网 时间:2024/05/14 03:58

如果我们把二叉树看成一个图,父子之间的连线看成,姑且定义"距离"为两个之间边的个数。

求一颗二叉树中相距最远两个点之间的距离。

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;
  }
}

 

 

0 0
原创粉丝点击