非递归实现树的后序遍历
来源:互联网 发布:百度云计算 编辑:程序博客网 时间:2024/05/30 23:21
前序遍历是通过一个stack,首先压入父亲结点,然后弹出父亲结点,并输出它的value,之后压人其右儿子,左儿子即可。然而后序遍历结点的访问顺序是:左儿子 -> 右儿子 -> 自己。那么一个结点需要两种情况下才能够输出:第一,它已经是叶子结点;第二,它不是叶子结点,但是它的儿子已经输出过。那么基于此我们只需要记录一下当前输出的结点即可。对于一个新的结点,如果它不是叶子结点,儿子也没有访问,那么就需要将它的右儿子,左儿子压入。如果它满足输出条件,则输出它,并记录下当前输出结点。输出在stack为空时结束。
class Solution { public: vector<int> postorderTraversal(TreeNode *root) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused for each test case. vector<int> path; if(root==NULL)return path; stack<TreeNode*> stk; stk.push(root); TreeNode* cur = NULL; while(!stk.empty()) { cur = stk.top(); if(cur->left ==NULL && cur->right ==NULL) { path.push_back(cur->val); stk.pop(); }else{ if(cur->right) { stk.push(cur->right); cur->right = NULL; } if(cur->left) { stk.push(cur->left); cur->left = NULL; } } } return path; } };
0 0
- 非递归实现二叉查找树的后序遍历
- 树的后序遍历非递归实现
- 用俩个栈实现二叉树的非递归后序遍历
- 非递归实现树的后序遍历
- 二叉树的遍历(后序)-非递归实现
- 二叉树的后序遍历--非递归实现
- 二叉树 前序遍历的非递归实现 中序遍历的非递归实现 后序遍历的非递归实现 创建二叉树
- 非递归实现二叉树的后序遍历、前序遍历、中序遍历
- 二叉树的先序、中序、后序遍历的递归和非递归实现
- java实现树的前序,中序,后序的递归和非递归遍历
- 树的前序,中序,后序遍历的递归以及非递归实现
- 二叉树的前序、中序、后序遍历 递归非递归实现
- 二叉树的前序、中序、后序(递归、非递归)遍历java实现
- 二叉树的前序,中序,后序遍历(递归非递归实现)
- 实现二叉树的前序/中序/后序递归、非递归遍历
- 二叉树的前序,中序,后序遍历。用递归和非递归实现
- 二叉树的后序递归,非递归遍历
- 【二叉树遍历算法】——前/中/后序递归与非递归的实现
- 启动程序端口被占用Address already in use: bind解决方案
- iOS面试题转自大神
- 104. Maximum Depth of Binary Tree
- python常见面试问题
- iOS7 initWithCustomView- leftBarButtonItem / rightBarButtonItem 偏移问题
- 非递归实现树的后序遍历
- CodeVS 2597团伙(并查集)
- Java多态中重载方法参数分别为父类和子类时的疑惑
- 计算机网络概论
- (蓝桥杯)历届试题 翻硬币 (蓝桥杯练习系统)
- Android View三种属性——VISIBLE,INVISIBLE,GONE
- poj 2387 Til the Cows Come Home
- 安卓状态栏+kitkat
- 比较cookies和Web Storage