【题目描述】
【思路一:迭代】
利用栈实现迭代,可以采用两个栈,也可以利用一个栈之后将结构逆向输出。 根节点先入栈,然后进入while循环,弹出栈顶元素并保存值在一个列表re中,再将栈顶元素的左右子节点依次入栈,然后继续执行循环即可。将re逆向返回即可。
C++:
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
stack<TreeNode*> stack;
vector<int> re;
if(!root){return re;}
stack.push(root);
while(!stack.empty()){
TreeNode* top=stack.top();
stack.pop();
re.push_back(top->val);
if(top->left){stack.push(top->left);}
if(top->right){stack.push(top->right);}
}
vector<int> re2;
for(int i=re.size()-1;i>=0;i--){
re2.push_back(re[i]);
}
return re2;
}
};
python3:
class Solution:
def postorderTraversal(self, root: TreeNode) -> List[int]:
re=[]
if not root:
return []
stack=[root]
while stack:
top=stack.pop()
re.append(top.val)
if top.left:
stack.append(top.left)
if top.right:
stack.append(top.right)
return re[::-1]
【思路二:递归】
递归太简单了,不多说,直接看代码。
C++:
class Solution {
public:
vector<int> re;
vector<int> postorderTraversal(TreeNode* root) {
dfs(root);
return re;
}
void dfs(TreeNode* root){
if (root){
dfs(root->left);
dfs(root->right);
re.push_back(root->val);
}
}
};
python3:
class Solution:
def postorderTraversal(self, root: TreeNode) -> List[int]:
self.re=[]
self.dfs(root)
return self.re
def dfs(self,root):
if root:
self.dfs(root.left)
self.dfs(root.right)
self.re.append(root.val)