0%

二叉树的后序遍历

题目描述

给定一个二叉树,返回它的后序遍历。

输入输出样例

1
2
3
4
5
6
7
8
输入: [1,null,2,3]  
1
\
2
/
3

输出: [3,2,1]

题解

一、递归解法
使用递归的三步走策略,与二叉树的前序遍历的递归并没有什么不同。具体的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public:
void build(TreeNode* root,vector<int>& res) {
if (root == nullptr) return;

build(root->left,res);
build(root->right,res);
res.push_back(root->val);
}
vector<int> postorderTraversal(TreeNode* root) {
vector<int> res;
build(root,res);
return res;
}
}

二、迭代解法
这里的解法,与前序遍历没有过多的区别。主要的区别大概就是对于遍历的顺序,这导致了left与right入栈的顺序的改变。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> ans;
if (root == nullptr) return res;
ans.push(root);
while (!ans.empty()) {
TreeNode* node = ans.top();
ans.pop();
res.push_back(node->val);
if (node->left) ans.push(node->left);
if (node->right) ans.push(node->right);
}
reverse(res.begin(),res.end());
return res;
}
};