递归算法的理解一直都是是比较抽象的,但不可否认他是一个高效且简单的算法。几行代码就可以解决递归一些复杂的思想:
而递归算法在使用的时候一定要注意好,递归的结束条件和递归的基本条件
哦豁,是不是没想到一行代码就解决了求二叉树结点个数的问题。哈哈哈递归算法就是如此的简单
// 二叉树结点个数
int BinaryTreeSize(BTNode* root)
{
return root == NULL ? 0 : 1 + BinaryTreeSize(root->left) + BinaryTreeSize(root->right);
}
📚 代码演示:
// 二叉树叶子结点个数
int BinaryTreeLeafSize(BTNode* root)
{
if (root == NULL)
return 0;
if (root->left == NULL && root->right == NULL)
{
return 1;
}
return BinaryTreeLeafSize(root->left) + BinaryTreeLeafSize(root->right);
}
第k层结点个数,这个就有点难度了,不过其实还好因为他们给我了我们节点的层数当我们递归一次的时候:
📚 代码演示:
// 二叉树第k层结点个数
int BinaryTreeLevelKSize(BTNode* root, int k)
{
if (root == NULL)
{
return 0;
}
if (k == 1 && root != NULL)
{
return 1;
}
return BinaryTreeLevelKSize(root->left, k-1 ) + BinaryTreeLevelKSize(root->right, k-1);
}
查找值为x的节点首先我们需要判断 跟为空的情况再来对他的左右子树进行递归查找:
// 二叉树查找值为x的结点
BTNode* BinaryTreeFind(BTNode* root, BTDataType x)
{
if (root == NULL)
return NULL;
if (root->data == x)
{
return root;
}
BTNode* find = NULL;
find = BinaryTreeFind(root->left, x);
if (find)
return find;
find = BinaryTreeFind(root->right, x);
if (find)
return find;
return NULL;
}
?? 把本章的内容全部掌握,铁汁们就可以熟练应用switch语句啦!
看到这里了还不给博主扣个:
?? 点赞
🍹收藏
?? 关注
!
💛 💙 💜 ?? 💚💓 💗 💕 💞 💘 💖
拜托拜托这个真的很重要!
你们的点赞就是博主更新最大的动力!
有问题可以评论或者私信呢秒回哦。