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

网站建设自助建站企业成人本科报考官网

网站建设自助建站企业,成人本科报考官网,找客服平台网站,哪些购物网站做的比较简洁有品质递归算法的三个要素 确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。 确定终止条件: 写完了递归算法, 运…

递归算法的三个要素

  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/420710.html

相关文章:

  • 做网站的图片取材百度网盘资源免费搜索引擎入口
  • 上海网站关键词优化seo搜索优化专员招聘
  • 万网网站备案查询长春做网站公司长春seo公司
  • 公司创建的法制网站企业策划书
  • 省级示范校建设专题网站湖人最新消息
  • 西宁市城中区建设局网站企业关键词推广
  • wordpress 面包屑导航湖南seo推广多少钱
  • wordpress 极简模板搜索引擎seo排名优化
  • 锦州网站建设锦州百度官网首页网址
  • 恩施北京网站建设搜索引擎营销的案例有哪些
  • 智能建站工具搜索引擎营销的手段包括
  • 高效简便的网站开发seo教程之关键词是什么
  • 南昌哪里做网站好网站推广公司推荐
  • 提供北京国互网网站建设seo点石论坛
  • 地方网站有何作用如何制作一个网页
  • 自学做网站一般要多久公司网站设计需要多少钱
  • 招标网站平台优秀网页设计赏析
  • 做一个网站只做前端怎么做百度客服人工电话
  • 最新网站建设合同seo免费诊断联系方式
  • 自己怎么做装修网站中国军事新闻最新消息
  • 如何制作个人网站教程宁波seo网络推广公司排名
  • 广州市海珠区建设局网站电商运营培训班多少钱
  • 做母婴育儿类网站好做seo排名吗重庆seo博客
  • 山东省个人网站备案公司做网站需要多少钱
  • 网站建设免费代理龙岗网站制作
  • 苏州松陵镇哪里做网站郑州seo代理商
  • 天津中小企业网站制作长春网站推广公司
  • 住房和城乡建设部网站建筑电工淘宝客seo推广教程
  • 外贸英文网站建设价格专业技能培训机构
  • 一个网站如何赚钱西安建站推广