当前位置: 首页 > wzjs >正文

个人网站设计作品图片咸阳seo

个人网站设计作品图片,咸阳seo,广东佛山网站建设,北京建网站定制价格递归算法的三个要素 确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。 确定终止条件: 写完了递归算法, 运…

递归算法的三个要素

  1. 确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。

  2. 确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。

  3. 确定单层递归的逻辑: 确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。

(1) 找出重复的子问题。

这个很好找,前序遍历的顺序是:根、左子树、右子树。

对于左子树或者右子树来说,也是同样的遍历顺序。

所以这个重复的子问题就出来了,先取根节点,再遍历左子树,最后遍历右子树

(2) 确定终止条件。

对于二叉树的遍历来说,想终止,即没东西遍历了,没东西遍历自然就停下来了。

那就是当前的节点是空的,既然是空的那就没啥好遍历。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:void Traversal(TreeNode* cur, vector<int>& vec){if(cur == NULL) return;vec.push_back(cur->val);Traversal(cur->left, vec);Traversal(cur->right, vec);}vector<int> preorderTraversal(TreeNode* root) {vector<int> result;Traversal(root, result);return result;}
};
  1. 构造函数

    • TreeNode():默认构造函数,初始化节点值为 0,左右子节点为 nullptr

    • TreeNode(int x):初始化节点值为 x,左右子节点为 nullptr

    • TreeNode(int x, TreeNode* left, TreeNode* right):初始化节点值为 x,并指定左右子节点。

  • 你在 while (cur != NULL) 中递归调用了 Traversal 函数。

  • 这个 while 循环会导致无限递归,因为 cur 的值在递归调用中不会改变,while 循环的条件始终为真(除非 cur 一开始就是 nullptr)。

  • 正确的递归实现应该用 if 判断,而不是 while 循环。

迭代法:用栈,不断地将旧的变量值,递推计算新的变量值

  • 初始化维护一个栈,将根节点入栈。

  • 当栈不为空时

    • 弹出栈顶元素 node,将节点值加入结果数组中。

    • 若 node 的右子树不为空,右子树入栈。

    • 若 node 的左子树不为空,左子树入栈。

class Solution {
public:vector<int> preorderTraversal(TreeNode* root) {stack<TreeNode*> st;vector<int> result;if(root == NULL) return result;st.push(root);while(!st.empty()){TreeNode* node = st.top();st.pop();result.push_back(node->val);if(node->right != NULL) st.push(node->right);if(node->left != NULL) st.push(node->left);}return result;}
};

TreeNode* node 的作用是 临时存储当前正在处理的二叉树节点。它是栈顶节点的副本,用于访问当前节点的值以及将其子节点压入栈中。

http://www.dtcms.com/wzjs/168294.html

相关文章:

  • 如何做网站自适应下列关于友情链接说法正确的是
  • 成都科技网站建设电话多少网站建设山东聚搜网络
  • b2b电商平台是什么意思seo体系百科
  • 怎么做一直弹窗口网站服务器租用
  • 成绩分析智能网站怎么做西安seo技术
  • 做网站视频存储在哪里百度后台推广登录
  • 做押韵句子的网站深圳百度地图
  • 中小型网站建设自助建站免费建站平台
  • 建立网站多少钱搜索引擎和浏览器
  • 青岛知名网站建设哪家好域名交易平台
  • 做网站需要营业执照吗怎么样做免费的百度seo
  • 免费自助网站建设常州网站seo
  • 设计师个人网站怎么做超云seo优化
  • 厦门h5网站建设十大营销策略有哪些
  • 直播源码seo外链是什么意思
  • 广西南宁网站公司做一个网站需要多少钱
  • 郓城做网站网络公司aso优化技术
  • 地方房地产网站如何让自己的网站快速被百度收录
  • ppt接单兼职网站石家庄百度推广排名优化
  • 企业网站 手机网站 app 微网站长沙排名优化公司
  • 东莞找工作最新招聘信息学生班级优化大师
  • 网站建设初期怎么添加内容周口网络推广公司
  • java制作的网站友情链接作用
  • 如何法院网站建设网站自动秒收录工具
  • 一个公司做两个网站可以吗世界最新新闻
  • 嘉兴专业网站建设黄山搜索引擎优化
  • 举报企业网站用个人信息备案系统优化软件排行榜
  • 服装商城网站建设2021年新闻摘抄
  • 自我介绍ppt配图seo案例分享
  • wordpress商品多选西安seo包年服务