1. 程式人生 > 實用技巧 >binary-tree-postorder-traversa 迭代求解二叉樹後序遍歷

binary-tree-postorder-traversa 迭代求解二叉樹後序遍歷

題目:

求給定的二叉樹的後序遍歷。 例如: 給定的二叉樹為{1,#,2,3}, 返回[3,2,1]. 備註;用遞迴來解這道題太沒有新意了,可以給出迭代的解法麼?

示例:

輸入:{1,#,2,3}    輸出:[3,2,1]

程式碼:

 1 /**
 2  * struct TreeNode {
 3  *    int val;
 4  *    struct TreeNode *left;
 5  *    struct TreeNode *right;
 6  * };
 7  */
 8 
 9 class Solution {
10 public:
11     /**
12      * 
13 * @param root TreeNode類 14 * @return int整型vector 15 */ 16 vector<int> postorderTraversal(TreeNode* root) { 17 vector<int> res; 18 if(root == NULL) return res; 19 stack<TreeNode*> st; 20 st.push(root); 21 while( !st.empty() ) {
22 TreeNode* temp = st.top(); 23 st.pop(); 24 res.push_back(temp->val); 25 if(temp->left != NULL) 26 st.push(temp->left); 27 if(temp->right != NULL) 28 st.push(temp->right); 29 } 30 reverse(res.begin(),res.end());
31 return res; 32 } 33 };

我的筆記:

  利用堆疊來實現後序遍歷。

演算法步驟:

  1. 儲存根節點;
  2. 存取當前棧頂元素,並出棧;
  3. 分別判斷左右結點是否為空;
  4. 依次放入左右結點;
  5. 再進行2~4操作直至棧中元素為空;
  6. 反轉陣列。