二叉树的递归讲的就是“递归”,下面是二叉树递归求一度结点二度结点等代码实现
原文链接:关于二叉树操作的进阶 - 掘金 (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);
}
汇总结束