binary-tree-postorder-traversa 迭代求解二叉樹後序遍歷
阿新 • • 發佈:2020-07-03
題目:
求給定的二叉樹的後序遍歷。 例如: 給定的二叉樹為{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 };
我的筆記:
利用堆疊來實現後序遍歷。
演算法步驟:
- 儲存根節點;
- 存取當前棧頂元素,並出棧;
- 分別判斷左右結點是否為空;
- 依次放入左右結點;
- 再進行2~4操作直至棧中元素為空;
- 反轉陣列。