题目描述
给定一个二叉树,返回它的后序遍历。
输入输出样例
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; } };
|