ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

假设二叉树采用二叉链表存储结构存储,试设计一个算法,计算一棵给定二叉树的所有双分支结点个数。

2026/9/12 5:12:47 拓冰建站 浏览量
假设二叉树采用二叉链表存储结构存储,试设计一个算法,计算一棵给定二叉树的所有双分支结点个数。

题目描述:假设二叉树采用二叉链表存储结构存储,试设计一个算法,计算一棵给定二叉树的所有双分支结点个数。

分析: 可以考虑使用递归和非递归两种思路,非递归借用队列来实现。

<1>递归算法

int Dlink(BiTree T){if(T == NULL)return 0;if(T->lchild && T->rchild)return Dlink(T->lchild) + Dlink(T->rchild) + 1;elsereturn 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;
}