LeetCode 145 二叉树后序遍历

题目链接: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;
    }
};
原文地址:https://www.cnblogs.com/zzw-/p/13296052.html