题目链接:https://leetcode-cn.com/problems/binary-tree-postorder-traversal/
思路描述:演示通过迭代的方式进行后序遍历。由于后序遍历过程中要保证先访问左右子树,在访问根节点,根节点的最后访问导致后序迭代比较困难。故通过参考LeetCode各种解答,发现可以转换思路,后序遍历是左右根,将其反转即是根右左,而根右左可以参照前序遍历的根左右实现。实现根右左的遍历后反序输出即为答案,具体代码如下:
/** * 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) { TreeNode *p=root; stack<TreeNode*>S; vector<int>res; while(!S.empty()||p){ if(p){ res.push_back(p->val); S.push(p); p=p->right; } else{ p=S.top()->left; S.pop(); } } int len=res.size(); for(int i=0;i<len/2;++i){ int temp; temp=res[i]; res[i]=res[len-i-1]; res[len-i-1]=temp; } return res; } };