前往二叉树的:前序,中序,后序 遍历算法

方法一:递归

    vector<int> res;
vector<int> postorderTraversal(TreeNode* root) {
if (!root) return res;
if (root->left) postorderTraversal(root->left);
if (root->right) postorderTraversal(root->right);
res.push_back(root->val);
return res;
}

方法二:非递归

    vector<int> postorderTraversal(TreeNode* root) {
vector<int> res;
if (!root) return res;
stack<TreeNode*> S;
TreeNode* p=root, *r=nullptr;
while (p||!S.empty())
{
if (p)
{
S.push(p);
p=p->left;
}
else
{
p=S.top();
if (p->right&&p->right!=r)
p=p->right;
else
{
S.pop();
res.push_back(p->val);
r=p;
p=nullptr;
}
}
}
return res;
}

方法三:非递归

    vector<int> postorderTraversal(TreeNode* root) {
vector<int> res;
if (!root) return res;
stack<TreeNode*> S;
TreeNode* p=root;
S.push(p);
while (!S.empty())
{
p=S.top();
S.pop();
if (p->left) S.push(p->left);
if (p->right) S.push(p->right);
res.insert(res.begin(),p->val);
}
return res;
}

最新文章

  1. Spark 资源池简介
  2. 【Storage】Ubuntu LVM 安装配置
  3. Java中构造函数执行顺序的问题
  4. php 图片等比缩放
  5. C#进阶之AOP
  6. MicroPython支持的开发板:高性能、低成本创客首选
  7. Programming In Scala笔记-第四章、类和对象
  8. Ueditor1.3.6 setContent的一个bug
  9. UVA - 11478 - Halum(二分+差分约束系统)
  10. vue2.0项目 calendar.js(日历组件封装)
  11. Java中常见的排序方式-选择排序(升序)
  12. flask中利用from来进行对修改修改时旧密码的验证
  13. 学习笔记之Supervised Learning with scikit-learn | DataCamp
  14. 【ArcGIS】Web AppBuilder For ArcGIS 配置使用
  15. Oracle 12c Windows安装、介绍及简单使用(图文)
  16. apache 服务器在ubuntu上图片无法显示解决
  17. ubuntu 常用命令集锦
  18. Linux命令-文件搜索命令:locate
  19. No module named _sqlite3
  20. 前端自动化工具 -- gulp https://angularjs.org/

热门文章

  1. 深入理解mysql索引
  2. win10系统怎么关闭自动更新
  3. .Net Core 迁移之坑一 《WebAPI Get请求参数传入输入带有[]不识别问题》
  4. c# 程序调用cmd执行命令如SVN.exe
  5. POJ1012(约瑟夫问题)
  6. IDEA MAVEN 1.8无效的源发行版
  7. c++ 组合模式(composite)
  8. ubuntu 14 编译ARM g2o-20160424
  9. pip指定安装包版本
  10. VC解决方案,项目,开发一段时间启动调试很慢,半天才开始链接