144. 二叉树的前序遍历 - 力扣(LeetCode)
- /**
- * Definition for a binary tree node.
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode() : val(0), left(nullptr), right(nullptr) {}
- * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
- * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
- * };
- */
- // 递归前序遍历
- class Solution {
- public:
- void traversal(TreeNode* cur,vector<int>& vec) {
- if(cur == NULL) return;
- vec.push_back(cur->val);
- traversal(cur->left,vec);
- traversal(cur->right,vec);
- }
- vector<int> preorderTraversal(TreeNode* root) {
- vector<int> vec;
- traversal(root,vec);
- return vec;
- }
- };
-
- // 非递归前序遍历
- class Solution {
- public:
- vector<int> preorderTraversal(TreeNode* root) {
- stack
st; - vector<int> res;
- if(root == NULL) return res;
- st.push(root);
- int i = 0;
- while(!st.empty()) {
- TreeNode* node = st.top(); // 中
- st.pop();
- res.push_back(node->val);
- if(node->right) st.push(node->right); // 右(空节点不入栈)
- if(node->left) st.push(node->left); // 右(空节点不入栈)
- }
- return res;
- }
- };
-
- /*
- 5
- 4 6
- 1 2
- // 第一步
- --------------------------------------
- |5
- --------------------------------------
- 5
- // 第二步
- --------------------------------------
- |6 4
- --------------------------------------
- 5
- // 第三步
- --------------------------------------
- |6
- --------------------------------------
- 5 4
- // 第四步
- --------------------------------------
- |6 2 1
- --------------------------------------
- 5 4
- // 第五步
- --------------------------------------
- |6 2
- --------------------------------------
- 5 4 1
- // 第六步
- --------------------------------------
- |6
- --------------------------------------
- 5 4 1 2
- // 第七步
- --------------------------------------
- |
- --------------------------------------
- 5 4 1 2 6
- */
- /**
- * Definition for a binary tree node.
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode() : val(0), left(nullptr), right(nullptr) {}
- * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
- * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
- * };
- */
- // 递归后序遍历
- class Solution {
- public:
- void traversal(TreeNode* cur,vector<int>& vec) {
- if(cur == NULL) return;
- traversal(cur->left,vec);
- traversal(cur->right,vec);
- vec.push_back(cur->val);
- }
- vector<int> postorderTraversal(TreeNode* root) {
- vector<int> vec;
- traversal(root,vec);
- return vec;
- }
- };
-
-
- // 前序:中 左 右 -> 中 右 左 (字符串反转)
- // -> 左 右 中(后序)
-
- // 非递归后序遍历
- class Solution{
- public:
- vector<int> postorderTraversal(TreeNode* root) {
- stack
st; - vector<int> res;
- if(root==NULL) return res;
- st.push(root);
- while(!st.empty()) {
- TreeNode* node = st.top();
- st.pop();
- res.push_back(node->val);
- if(node->left) st.push(node->left);
- if(node->right) st.push(node->right);
- }
- reverse(res.begin(),res.end());
- return res;
- }
- };