iis 网站启动不了,云服务器和虚拟主机有什么区别,网页设计五个页面,wordpress慢 数据库6#x1f3ac; 鸽芷咕#xff1a;个人主页 #x1f525; 个人专栏: 《linux深造日志》 《高效算法》 ⛺️生活的理想#xff0c;就是为了理想的生活! 文章目录 一、递归的介绍二、递归算法的妙用2.1 二叉树结点个数2.2 二叉树叶子结点个数2.3 二叉树第k层结点个数2.4 二叉树… 鸽芷咕个人主页 个人专栏: 《linux深造日志》 《高效算法》 ⛺️生活的理想就是为了理想的生活! 文章目录 一、递归的介绍二、递归算法的妙用2.1 二叉树结点个数2.2 二叉树叶子结点个数2.3 二叉树第k层结点个数2.4 二叉树查找值为x的结点 文章结语 一、递归的介绍
递归算法的理解一直都是是比较抽象的但不可否认他是一个高效且简单的算法。几行代码就可以解决递归一些复杂的思想
其思想就是通过一个大问题分解成更小、相似的子问题来进行重复调用去解决复杂的大问题
而递归算法在使用的时候一定要注意好递归的结束条件和递归的基本条件
一但结束条件没控制到就会发生死递归这类的程序错误而基本递归情况是一个中最关键的部分否则就会出现栈溢出等情况
二、递归算法的妙用
2.1 二叉树结点个数
哦豁是不是没想到一行代码就解决了求二叉树结点个数的问题。哈哈哈递归算法就是如此的简单
大问题转换为小问题递归结束条件
// 二叉树结点个数
int BinaryTreeSize(BTNode* root)
{return root NULL ? 0 : 1 BinaryTreeSize(root-left) BinaryTreeSize(root-right);
}2.2 二叉树叶子结点个数 代码演示 // 二叉树叶子结点个数
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);
}2.3 二叉树第k层结点个数
第k层结点个数这个就有点难度了不过其实还好因为他们给我了我们节点的层数当我们递归一次的时候
节点进行-1来表示我们当前的层数当他为1时就递归到我们需要的层数了 注一定要注意好不要 自减 这样就把原本的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);
}2.4 二叉树查找值为x的结点
查找值为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语句啦 看到这里了还不给博主扣个 ⛳️ 点赞收藏 ⭐️ 关注 ❤️ 拜托拜托这个真的很重要 你们的点赞就是博主更新最大的动力 有问题可以评论或者私信呢秒回哦。