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

在别人网站上建设频道或栏目相关法律规定独立站seo建站系统

在别人网站上建设频道或栏目相关法律规定,独立站seo建站系统,沈阳共产党员两学一做网站,做网站还是小程序非递归遍历二叉树一、二叉树的前序遍历二、二叉树的中序遍历三、二叉树的后序遍历3.1 方法一3.2 方法二一、二叉树的前序遍历 题目链接 我们可以把任何一棵树看成左路节点,左路节点和右子树。先访问左路节点,再访问左路节点的右子树。在右子树中也重复这…

非递归遍历二叉树

  • 一、二叉树的前序遍历
  • 二、二叉树的中序遍历
  • 三、二叉树的后序遍历
    • 3.1 方法一
    • 3.2 方法二

一、二叉树的前序遍历

题目链接

我们可以把任何一棵树看成左路节点,左路节点和右子树。先访问左路节点,再访问左路节点的右子树。在右子树中也重复这种循环,就是非递归遍历二叉树的思想。

在这里插入图片描述
解释:
栈st存放节点,v存放数值,cur初始化为root。
循环条件是栈不为空或者cur不为空(访问最后一个节点之前栈就已经为空了),循环遍历左子树并且把左子树入栈,同时把值存入v中。然后弹出栈顶元素,并且把栈顶元素的右子树赋值给cur,这样就形成了遍历。
当栈不为空的时候说明还有左路节点的右子树没有被访问,当cur不为空的时候说明还有树要被访问。当同时为空的时候才是访问完成。当一个节点出栈的时候说明此时该节点及该节点的左子树已经被访问完成了。

class Solution {
public:vector<int> preorderTraversal(TreeNode* root) {stack<TreeNode*> st;vector<int> v;TreeNode* cur = root;while(cur || !st.empty()){while(cur){st.push(cur);v.push_back(cur->val);cur = cur->left;}TreeNode* node = st.top();st.pop();cur = node->right;// 转化成子问题访问右子树}return v;}
};

二、二叉树的中序遍历

题目链接

因为中序遍历的访问顺序是左根右,跟前序遍历不同,所以我们让左节点入栈的时候先不访问,出栈(说明左子树访问完了)时在访问节点

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

三、二叉树的后序遍历

3.1 方法一

首先我们知道后序遍历就是左右根,而我们可以把访问顺序变成根右左,然后再逆置顺序。而根右左就跟前序遍历的方法一样:

class Solution {
public:vector<int> postorderTraversal(TreeNode* root) {stack<TreeNode*> st;vector<int> v;TreeNode* cur = root;while(cur || !st.empty()){while(cur){st.push(cur);v.push_back(cur->val);cur = cur->right;}TreeNode* node = st.top();st.pop();cur = node->left;}reverse(v.begin(), v.end());return v;}
};

3.2 方法二

按照常规的遍历方法走左右根,但是这里有一个问题:
当访问到根的时候有两种情况:
1️⃣ 从左子树回来,现在要先访问右子树
2️⃣ 从右子树回来,左右子树已经访问完毕,再访问根。
针对这种情况我们可以在加一个变量来确定是第几次访问根,如果是第一次就访问右子树,如果是第二次就访问。

class Solution {
public:vector<int> postorderTraversal(TreeNode* root) {stack<pair<TreeNode*, bool>> st;vector<int> v;TreeNode* cur = root;while(cur || !st.empty()){while(cur){st.push(make_pair(cur, false));cur = cur->left;}TreeNode* node = st.top().first;if(st.top().second == true){st.pop();v.push_back(node->val);}else{st.top().second = true;cur = node->right;}}return v;}
};
http://www.hengruixuexiao.com/news/38710.html

相关文章:

  • 彩票网站里的统计怎么做西安seo学院
  • 网站开发的完整流程全球搜索引擎排行榜
  • 用vs2012做网站首页沈阳seo关键词排名
  • 网站加载进度条陕西省人民政府
  • 浙江省交通建设工程监督管理局网站站长工具亚洲
  • 中小型企业网站优化推广徐州百度快照优化
  • 企业网站的完整性包括哪些数据指数
  • 做网站需要每年都缴费吗电子商务营销的概念
  • 镇江网站百度竞价排名系统
  • 做一般的公司网站需要多少钱海外网络推广方案
  • 衢州做网站seo关键词优化推广外包
  • 怎麽做网站寻找外贸客户的网站
  • 网站模板wordpress东莞网站建设推广平台
  • 专业制作网站电脑关键词英文
  • 秦皇岛手机网站制作多少钱电商seo优化是什么
  • 工厂网络设计方案网站优化企业排名
  • 中小企业网站制作费用关键词百度指数查询
  • 惠阳东莞网站建设上海百度竞价点击软件
  • 专业网站建设公司b站视频推广网站400
  • 如何做网站广告图片免费建自己的网址
  • 微站图片网站收录批量查询
  • 调查问卷在哪个网站做谷歌浏览器手机版
  • 搭建网站需要学什么排名函数rank怎么用
  • 化妆品网站静态模板全球搜怎么样
  • 中国站长站外贸网站模板
  • 石家庄市新闻最新消息杭州网站建设 seo
  • 网站建设成本计划宁波谷歌seo
  • 怎样在手机上做网站搜索排名查询
  • 模板网站可以做优化西安seo高手
  • 艾奇视觉网站建设网站优化主要优化哪些地方