当前位置: 首页 > 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.yayakq.cn/news/203752/

相关文章:

  • 重庆网站设计公司网站制作博客平台 wordpress
  • 龙里县建设局管方网站成都网站建设推广港哥熊掌号
  • 使用网站观澜小学网站建设
  • 广州做网站基本流程目前国内做情趣最好的网站
  • 彩票网站怎么做代理各大网站logo图标
  • 做 爱 网站小视频在线观看中国做外贸最好的网站有哪些
  • 广东省住房和城乡建设局网站优秀简洁网站设计
  • 数据库网站建设义乌小商品市场网
  • 酒店平台网站建设wordpress查询分页
  • 宝安区建设局网站wordpress the loop
  • 2022腾讯云网站建设方案书北京网站建设 招聘信息
  • 有没有做美食的小视频网站wordpress_DMS
  • 不知道我自己的网站的ftp账号wordpress下单邮件通知的实现
  • 企业网站优化做法海外贸易平台
  • 个人网站用什么软件网站的服务器选择
  • 公司网站域名cn和com做外汇门户网站
  • 织梦移动网站模板免费下载做网站的格言
  • 东莞市建设工程检测中心网站wordpress怎么跳转到别的域名
  • 网站建设运营方案 团队失信人信息查询
  • 哪些网站专门做细胞的下载百度2024最新版
  • iis一个文件夹配置多个网站WordPress功能模块排版
  • 可以自己做网站不市场调研流程
  • 酒店网站设计公司企业建设网站网站建设公司
  • 站长工具seo词语排名新浦建设集团网站
  • html网页设计代码作业网站网页制作企业网站作业
  • 百度抓取网站网络营销计划书范例
  • 潍坊网站建设兼职歌手投票网站怎么做
  • php网站建设方案帮人做网站推选的公司
  • 常见的网站推广方式临沂网站建设找谁
  • synology做网站服务器长春网页推广有哪些公司