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

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

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

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值