6.4.2 二叉树其它操作算法举例

 一、统计二叉树中叶子结点的个数

  容易想到,实现这个操作只要对二叉树"遍历"一遍,并在遍历过程中对"叶子结点计数"即可。显然这个遍历的次序可以随意,即先序或中序或后序均可,只是为了在遍历的同时进行计数,需要在算法的参数中设一个"计数器"。

算法6.3
  void CountLeaf (BiTree T, int& count)
 {
  // 先序遍历二叉树,以 count 返回二叉树中叶子结点的数目
  if ( T ) {
   if ((!T->Lchild)&& (!T->Rchild))
    count++;              // 对叶子结点计数
    CountLeaf( T->Lchild, count);
    CountLeaf( T->Rchild, count);
  } // if
 } // CountLeaf
 


  遍历二叉树是二叉树各种操作的基础,即很多操作可以在遍历过程中完成。根据遍历算法的程序框架,可以派生出很多关于二叉树的应用算法,如求结点的双亲、结点的孩子,判定结点所在层次等,甚至可以在遍历过程中生成结点,建立二叉树的存储结构。

  思考题 能否将 count 设成函数中的局部变量,然后以 count 的值作为函数值返回?