145. Binary Tree Postorder Traversal
来源:互联网 发布:淘宝怎么参加双11活动 编辑:程序博客网 时间:2024/05/17 09:36
题目:Binary Tree Postorder Traversal
原题链接:https://leetcode.com/problems/binary-tree-postorder-traversal/
Given a binary tree, return the postorder traversal of its nodes’ values.
For example:
Given binary tree {1,#,2,3},
return [3,2,1].
Note: Recursive solution is trivial, could you do it iteratively?
给出一个二叉树,返回它的后序遍历元素顺序。
注意,不能用递归。
如上图,后序遍历结果为 [3,2,1]
不用递归的话需要用栈,根据栈后进先出的顺序,由于后序遍历的顺序是左子树,右子树,根节点,那么压入栈的顺序应该是根节点,右子树,左子树。
方法如下,把根节点入栈。
然后每次从栈中取出栈顶节点,判断当前节点是不是前一个输出节点的父节点,如果是的话,说明当前节点的子树已经都遍历完了,输出即可;如果不是,说明当前输出的节点和前一个输出的节点的分部应该是某个节点的右子树和左子树上,这个时候需要把当前节点的子树再按照右子树,左子树的顺序压入栈,直到叶子节点。然后取出叶子节点,遍历它。重复上述过程。
代码如下:
/** * 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> ret; stack<TreeNode*>st; if(root) st.push(root); while(!st.empty()) { if(st.top()->left!=root && st.top()->right!=root) { while(auto x=st.top()) { if(x->right) st.push(x->right); if(x->left) st.push(x->left); if(!x->right && !x->left) break; } } root=st.top(); ret.push_back(root->val); st.pop(); } return ret; }};
0 0
- 145.Binary Tree Postorder Traversal
- 145.Binary Tree Postorder Traversal
- 145.Binary Tree Postorder Traversal
- 145. Binary Tree Postorder Traversal
- 145. Binary Tree Postorder Traversal
- 145. Binary Tree Postorder Traversal
- 145. Binary Tree Postorder Traversal
- 145. Binary Tree Postorder Traversal
- 145. Binary Tree Postorder Traversal
- 145. Binary Tree Postorder Traversal
- 145. Binary Tree Postorder Traversal
- 145. Binary Tree Postorder Traversal
- 145. Binary Tree Postorder Traversal
- 145. Binary Tree Postorder Traversal
- 145. Binary Tree Postorder Traversal
- 145. Binary Tree Postorder Traversal
- 145. Binary Tree Postorder Traversal
- 145. Binary Tree Postorder Traversal
- linux统计命令WC
- BZOJ2091[Poi2010] The Minima Game
- 基于VGI签到类目关联规则挖掘
- CAS单点登录
- Android 软键盘相关
- 145. Binary Tree Postorder Traversal
- Framework manager编写SQL错误整理
- DOS命令大全:More命令详解
- Shell 递归函数笔记
- JAVA环境的配置
- android 慎用drawable中大图,造成内存溢出的解决方案
- 数据结构与算法学习(三)栈结构Stack
- DSP++ .global,.section,.var
- NSQ如何在windows上安装