已知二叉树中的结点类型用BinTreeNode表示,被定义为:
struct BinTreeNode{
char data; BinTreeNode *lChild, *rChild;};
其中:data为结点值域;lChild和rChild分别为指向左、右子女结点的指针域。
根据下面函数声明编写出求一棵二叉树叶子节点数目的算法。
Int BtCouLeaves(BinTreeNode *BT);
Int BtCouLeaves(BinTreeNode *BT)
{int count,lum,rnum;
count=0;
if(BT)
  {if(BT->lchild&&BT->rchild)  count++;
      else{ lnum=BtCouLeaves(BT->lchild);
             rnum=BtCouLeaves(BT->rchild);
             count=lnum+rnum;
            }
   }
return count;
}这是求叶子节点的算法!题目改为求非叶子结点了,怎么做啊?

解决方案 »

  1.   

    int BtCouLeaves(BinTreeNode *BT)
    {int count,lum,rnum;
    count=0;
    if(BT)
      {
         if(BT-> lchild || BT-> rchild)  
         {
               ++count;
               lnum=BtCouLeaves(BT-> lchild);
                 rnum=BtCouLeaves(BT-> rchild);
                 count=lnum+rnum+count;
         }
       }
    return count;
      

  2.   

    int BtCouLeaves(BinTreeNode *BT)
    {int count,lum,rnum;
    count=0;
    if(BT)
      {
         if(!BT->  lchild  ¦ ¦! BT->  rchild)  
         {
               ++count;
               lnum=BtCouLeaves(BT->  lchild);
                 rnum=BtCouLeaves(BT->  rchild);
                 count=lnum+rnum+count;
         }
       }
    return count;
      

  3.   

    嗯 判断一下非叶子节点
    if(BT)
    才递归求和计算
      

  4.   

    5楼是错的吧,1楼MS没必要求和时再加个countLZ这可是java区啊