题目:

给定一个二叉树,返回它的 后序 遍历。

示例:

输入: [1,null,2,3]
1
\
2
/
3 输出: [3,2,1]

进阶: 递归算法很简单,你可以通过迭代算法完成吗?

解题思路:

1、使用一个栈,先把二叉树的右孩子压入,再把左孩子压入。这样在输出时就满足后序要求(先左后右)。

2、当某个节点的左孩子或者右孩子都为NULL时,可以访问。此外记录当前节点p的上一个节点last,因为当p的左右孩子都已访问过时,轮到p被访问,设置last可标志p的左右孩子是否都被访问过了。即为 if((p->right == NULL && p->left == last) || p->right == last)

代码:

 /**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> ans;
if(root == NULL)
return ans;
TreeNode* p = root;
TreeNode* last;
stack<TreeNode*> s;
s.push(p);
while(!s.empty())
{
p = s.top();
if((p->left == NULL && p->right == NULL) || (p->right == NULL && p->left == last) || p->right == last)
{
ans.push_back(p->val);
last = p;
s.pop();
}
else
{
if(p->right)
s.push(p->right);
if(p->left)
s.push(p->left);
}
}
return ans;
}
};

最新文章

  1. java轻量级Http Server
  2. VS开发好用的扩展
  3. Leetcode#79 Word Search
  4. careercup-C和C++
  5. 使用Identity Server 4建立Authorization Server (6) - js(angular5) 客户端
  6. weblogic部署web项目出现错误
  7. 导致spring事务配置不起作用的一种原因
  8. Vue2.0学习——axios用法详解
  9. Mesos+Zookeeper+Marathon的Docker管理平台部署记录(1)
  10. select默认选择后台转过来的option选项
  11. div上下左右居中方法
  12. UNITY2018 真机开启deepprofiling的操作
  13. 20145330 《网络对抗》 Web安全基础实践
  14. angularjs中如何在异步请求执行完以后再执行其他函数?
  15. 多维尺度变换MDS(Multidimensional Scaling)
  16. FOJ 1402(dp推规律)
  17. vs git .vs12.suo
  18. Xamarin XAML语言教程构建ControlTemplate控件模板 (二)
  19. Shell编程-环境变量配置文件
  20. jdk中那些常见的类不能被继承的

热门文章

  1. idea自个常用工具的总结
  2. 删除List集合中的元素方法
  3. HTML5外包注意事项-开发HTML5游戏的九大坑与解决方法剖析
  4. docker笔记(3) ------Django项目的docker部署
  5. vue 学习笔记(一)
  6. 深入理解Java虚拟机(第二版)中《长期存活对象将进入老年代》的实践
  7. Shopping List
  8. docker 中安装 redis
  9. css中position 定位的兼容性,以及定位的使用及层级的应用
  10. 笔记《JavaScript 权威指南》(第6版) 分条知识点概要3—表达式和运算符