Leetcode典型題解答和分析、歸納和彙總——T145(二叉樹的後序遍歷)

問題描述:

給定一個二叉樹,返回它的後序遍歷。

問題分析:

這個與二叉樹的前序遍歷一樣,但是順序要改爲左->右->頭節點的順序。

這裏我們採用迭代算法來求解。主要是採用數據結構中的“棧”的思想。具體的操作如下:

我們先將根節點入棧,然後進行如下循環:

(1)查看棧頂元素top,

(2)如果top有左節點,則把左節點入棧;

(3)如果top沒有左節點,則把右節點入棧‘

(4)如果左右節點都不存在,就將該top節點輸出,並且彈出棧。

爲了防止出現死循環,我們需要在top左(或者右)節點入棧之後,將其設置爲nullptr。

/**
 * 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> res;
         stack<TreeNode*> ans;
         if(root==nullptr)  return res;
         ans.push(root);
         TreeNode *tmp;

         ans.push(root);
         while(ans.size()>0)
         {
             tmp = ans.top();
             if(tmp->left!=nullptr)
             {
                 ans.push(tmp->left);
                 tmp->left = nullptr;
             }

             else if(tmp->right!=nullptr)
             {
                 ans.push(tmp->right);
                 tmp->right = nullptr;
             }
             else 
             {
                 res.push_back(tmp->val); 
                 ans.pop();
             }
             
         }
         res.pop_back();
         return res;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章