1. 程式人生 > 實用技巧 >LeetCode 145 二叉樹後序遍歷

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; } };