144. 二叉树的前序遍历

题目描述

给你二叉树的根节点 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> preorderTraversal(TreeNode* root) {
  15. if (!root) {
  16. return {};
  17. }
  18. vector<int> res;
  19. stack<TreeNode*> s;
  20. s.push(root);
  21. while (!s.empty()) {
  22. TreeNode* node = s.top();
  23. s.pop();
  24. res.push_back(node->val);
  25. if (node->right) {
  26. s.push(node->right);
  27. }
  28. if (node->left) {
  29. s.push(node->left);
  30. }
  31. }
  32. return res;
  33. }
  34. };