145. 二叉树的后序遍历

题目描述

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历

解题思路

  • 与先序遍历采取完全相反的策略

复杂度分析

时间复杂度:O(N)
空间复杂度:O(N)

知识点

二叉树,后序遍历

代码

  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * TreeNode *left;
  6. * TreeNode *right;
  7. * TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8. * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9. * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10. * };
  11. */
  12. class Solution {
  13. public:
  14. vector<int> postorderTraversal(TreeNode* root) {
  15. if (!root) {
  16. return {};
  17. }
  18. vector<int> res;
  19. stack<TreeNode*> s1, s2;
  20. s1.push(root);
  21. while (!s1.empty()) {
  22. TreeNode* node = s1.top();
  23. s1.pop();
  24. s2.push(node);
  25. // 此时的打印顺序为中-右-左
  26. if (node->left) {
  27. s1.push(node->left);
  28. }
  29. if (node->right) {
  30. s1.push(node->right);
  31. }
  32. }
  33. // 颠倒后的打印顺序为左-右-中
  34. while (!s2.empty()) {
  35. TreeNode* node = s2.top();
  36. s2.pop();
  37. res.push_back(node->val);
  38. }
  39. return res;
  40. }
  41. };