题目描述:假设二叉树采用二叉链表存储结构存储,试设计一个算法,计算一棵给定二叉树的所有双分支结点个数。
分析: 可以考虑使用递归和非递归两种思路,非递归借用队列来实现。
<1>递归算法
int Dlink(BiTree T){
if(T == NULL)
return 0;
if(T->lchild && T->rchild)
return Dlink(T->lchild) + Dlink(T->rchild) + 1;
else
return Dlink(T->lchild) + Dlink(T->rchild);
}
<2>非递归算法
非递归借用队列,节点入队,出队时,左右子树是否都存在?个数+1:哪个存在让哪个入队
int Dlink2(BiTree T){
InitQueue(Q);
BiTNode *p;
int num = 0;
EnQueue(Q,T);
while(!IsEmpty(Q)){
DeQueue(Q,p);
if(p->lchild && p->rchild)
num++;
if(p->lchild)
EnQueue(Q,p->lchild);
if(p->rchild)
EnQueue(Q,p->rchild);
}
return num;
}