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

武汉平价网站建设外包公司排名

武汉平价网站建设,外包公司排名,京东网站设计代码,wordpress去顶部文字非递归遍历二叉树一、二叉树的前序遍历二、二叉树的中序遍历三、二叉树的后序遍历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.khdw.cn/news/56571.html

相关文章:

  • 做微信h5的网站海外推广方案
  • 县总工会网站建设情况介绍茶叶网络营销策划方案
  • 长春做网站哪家公司好百度帐号管家
  • 学院招生网站建设方案东莞网站建设最牛
  • 台州黄岩做网站网推接单平台有哪些
  • 宁波英文网站建设央视新闻的新闻
  • 牟平网站制作公司百度输入法下载
  • org网站备案公司在百度怎么推广
  • 网站怎么做返回主页按钮网站点击软件排名
  • 网站添加百度搜索排行榜百度
  • 建立网站后台怎么开网店
  • 咸宁网站建设怎么分析一个网站seo
  • 做免费网站怎么赚钱百度seo优化是做什么的
  • 做网站的公司哪家强百度小说排行榜总榜
  • 桥南做网站网页快照
  • 苏州微信网站建设网站seo专员
  • 郑州高考网站建设深圳招聘网络推广
  • 黄骅市人民医院官网seo的搜索排名影响因素有
  • asp做学生信息网站建立网站要多少钱一年
  • 网站都不需要什么备案时事新闻最新2022
  • 广州专业做网站销售外包
  • 寮步仿做网站第一接单网app地推和拉新
  • 独特网站的百度seo优化教程免费
  • 网站建设nayuwang怎么注册域名网址
  • 谁做响应式网站百度指数大数据分享平台
  • 公司做网站开票是什么项目百度信息流广告推广
  • 添加建设银行的网站91永久海外地域网名
  • 如何做网站公众号推广西安网站公司推广
  • 国外网页素材网站谷歌商店下载官方
  • 网站的主题关键词代做排名推广