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

个人网站设计作品图片甘肃百度推广电话

个人网站设计作品图片,甘肃百度推广电话,使用unity做网站,深圳给企业做网站递归算法的三个要素 确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。 确定终止条件: 写完了递归算法, 运…

递归算法的三个要素

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

相关文章:

  • dw做一个小网站教程微信营销平台哪个好
  • 邯郸网站建设效果宜兴网站建设
  • 西安SEO网站建设企业网络营销目标
  • 网站建设管理教程郑州竞价托管代运营
  • 全面的网站建设百度快照不更新怎么办
  • 广西住房和城乡建设厅培训中心网扬州百度seo公司
  • 建立的意思长沙企业seo服务
  • 跨境电子商务网页制作与网站建设北京seo设计公司
  • 营销型企业、公司网站案例郑州网站优化顾问
  • 南昌网站seo多少钱网站排名优化价格
  • 重庆市建设工程节能中心网站百度怎么发布自己的信息
  • 企业网站怎么备案短视频推广引流
  • 怎么在网站注册账号点击排名软件哪个好
  • 做网页设计卖钱的网站软文投稿平台有哪些
  • 国内网站如何做流量互联网营销策划是做什么的
  • 专做健身餐的网站宁德市高中阶段招生信息平台
  • app推广代理平台单页站好做seo吗
  • 建设网站 安全事项电商运营多少钱一个月
  • 微信公众号怎么做微网站吗2021百度模拟点击工具
  • com域名是哪个国家的搜索引擎优化的主要手段
  • 安卓手机做服务器网站北京seo代理商
  • 做网站需要每年交钱吗谷歌搜索引擎香港免费入口
  • wordpress 独立站全球搜是什么公司
  • 微信端网站开发流程图军事新闻最新消息今天
  • 企业网站轮播图怎么做seo优化快速排名技术
  • 常州地区做网站nba最新消息新闻报道
  • 如何分析竞争对手网站上海网络优化seo
  • 建设全网营销型网站网络营销属于什么专业类型
  • 免费的静态网站托管网站建设方案书范文
  • 汉中专业网站建设seo技术大师