先序遍历:
/** * 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) { stack<TreeNode *> st; vector<int> result; if(root != NULL) st.push(root); else return result; while(!st.empty()){ TreeNode *node = st.top(); st.pop(); result.push_back(node->val); if(node->right != NULL) st.push(node->right); if(node->left != NULL) st.push(node->left); } return result; } };
中序遍历:
/** * 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> inorderTraversal(TreeNode *root) { vector<int> result; stack<TreeNode *> st; if(root == NULL) return result; if(root->right != NULL) st.push(root->right); st.push(root); TreeNode* node = root->left; while(node != NULL){ if(node->right != NULL) st.push(node->right); st.push(node); node = node->left; } while(!st.empty()){ node = st.top(); st.pop(); result.push_back(node->val); if(!st.empty() && st.top() == node->right){ node = st.top(); st.pop(); while(node != NULL){ if(node->right != NULL) st.push(node->right); st.push(node); node = node->left; } } } return result; } };
后序遍历:
/** * 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> postorderTraversal(TreeNode *root) { vector<int> result; stack<TreeNode *> st; TreeNode *node = root; if(node == NULL) return result; st.push(node); if(node->right != NULL) st.push(node->right); if(node->left != NULL) st.push(node->left); TreeNode *lastNode = NULL; while(!st.empty()){ node = st.top(); st.pop(); if(node->left == NULL && node->right == NULL){ result.push_back(node->val); lastNode = node; } else if(lastNode != NULL && (lastNode == node->left || lastNode == node->right)){ result.push_back(node->val); lastNode = node; } else { st.push(node); if(node->right != NULL) st.push(node->right); if(node->left != NULL) st.push(node->left); } } return result; } };
时间: 2024-10-29 01:05:30