计算度为二的结点个数
递归法(一)
算法思想:用递归的数学模型来理解:
f(b)=0 //若b是空树则本身不是度为二的结点,也无左右孩子,总共的度为二结点个数为0
f(b)=f(b->lchild)+f(b->rchild)+1 //若b是双分支结点,则总共的度为二结点个数为其自身加上其左右子树度为二结点个数
f(b)=f(b->lchild)+f(b->rchild) //若b为其他情况(不为空且度也不为2),则总共度为二结点个数为左右子树度为二结点只和
代码如下:
int DsonNodes(BiTree b){
if(b==NULL) //空结点
return 0;
else if(b->lchild!=NULL&&b->rchild!=NULL) //双分支结点
return DsonNodes(b->lchild)+DsonNodes(b->rchild)+1;
else //其他情况(度为0或1)
return DsonNodes(b->lchild)+DsonNodes(b->rchild);
}
递归法(二)
算法思想:遍历二叉树,用一个全局变量n来记录度为二结点个数,每遍历一个结点时判断度是否为2,若是则n++
代码如下:
int n=0;
void DsonNodes(BiTree b,int &n){ //先序遍历二叉树
if(b!==NULL){
if(b->lchild!=NULL&&b->rchild!=NULL) //若结点度为二则n++
n++;
DsonNodes(b->lchild);
DsonNodes(b->rchild);
}
}
标签:lchild,结点,中度,度为,DsonNodes,二叉树,rchild,NULL
From: https://www.cnblogs.com/Auous/p/16784259.html