二叉树求(结点、深度等)数目和汇总

177 阅读1分钟

二叉树的递归讲的就是“递归”,下面是二叉树递归求一度结点二度结点等代码实现
原文链接:关于二叉树操作的进阶 - 掘金 (juejin.cn)
PS: 本文新增一度二度结点求法

求树的结点个数:

//求树的节点数
int BTNodeNum(BTNode* root) {
	if (root == NULL)
		return 0;
	else
		return BTNodeNum(root->lchild) + BTNodeNum(root->rchild) + 1;
}

求树的深度:

//求树的深度
int BTreeDepth(BTNode* root) {
	if (root == NULL)
		return 0;
	int left = BTreeDepth(root->lchild);
	int right = BTreeDepth(root->rchild);
	return left > right ? left + 1 : right + 1;
}

求叶子结点数:

//求叶子个数
int LeafNum(BTNode* root) {
	if (root == NULL)
		return 0;
	else if (root->lchild == NULL && root->rchild == NULL)
		return 1;
	else
		return LeafNum(root->lchild) + LeafNum(root->rchild);
}

求一度结点数:

//求一度结点个数
int onecount(BTNode* root) {
	if (root == NULL || (root->lchild == NULL && root->rchild == NULL))
		return 0;
	else if (root->lchild && root->rchild)
		return onecount(root->lchild) + onecount(root->rchild);
	else
		return onecount(root->lchild) + onecount(root->rchild) + 1;
}

求二度结点数:

//求二度结点的个数
int count(BTNode* root) {
	if (root == NULL)
		return 0;
	else if (root->lchild && root->rchild)
		return count(root->lchild) + count(root->rchild) + 1;
	else
		return count(root->lchild) + count(root->rchild);
}

汇总结束