1. 递归解法
- /**
- * Definition for binary tree
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
- * };
- */
- class Solution {
- public:
- vector<int> path;
- void preorder(TreeNode *root)
- {
- if (root == NULL)
- return;
- path.push_back(root->val);
- preorder(root->left);
- preorder(root->right);
- }
- vector<int> preorderTraversal(TreeNode *root) {
- preorder(root);
- return path;
- }
- };
2. 非递归解法一(空间复杂度O(n))
- /**
- * Definition for binary tree
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
- * };
- */
- class Solution {
- public:
- vector<int> preorderTraversal(TreeNode *root) {
- vector<int> path;
- path.clear();
- stack<TreeNode *> st;
- if (root == NULL)
- return path;
- st.push(root);
- while (!st.empty())
- {
- TreeNode *node = st.top();
- st.pop();
- path.push_back(node->val);
- if (node->right != NULL)
- st.push(node->right);
- if (node->left != NULL)
- st.push(node->left);
- }
- return path;
- }
- };
3. 非递归解法(空间复杂度O(1))
- /**
- * Definition for binary tree
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
- * };
- */
- class Solution {
- public:
- vector<int> preorderTraversal(TreeNode *root) {
- vector<int> path;
- if (root == NULL)
- return path;
- TreeNode *cur = root;
- TreeNode *pre = NULL;
- while (cur != NULL)
- {
- if (cur->left == NULL)
- {
- path.push_back(cur->val);
- cur = cur->right;
- }
- else
- {
- pre = cur->left;
- while (pre->right != NULL && pre->right != cur)
- pre = pre->right;
- if (pre->right == NULL)
- {
- pre->right = cur;
- path.push_back(cur->val);
- cur = cur->left;
- }
- else
- {
- pre->right = NULL;
- cur = cur->right;
- }
- }
- }
- return path;
- }
- };