二叉树的递归遍历
class Solution {
public:
void traversal(TreeNode* node, vector<int>& vec) {
if (node == nullptr) return;
vec.push_back(node->val);
traversal(node->left, vec);
traversal(node->right, vec);
return;
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> ans;
traversal(root, ans);
return ans;
}
};
void traversal(TreeNode* node, vector<int>& vec) {
if (node == nullptr) return;
traversal(node->left, vec);
traversal(node->right, vec);
vec.push_back(node->val);
return;
}
void traversal(TreeNode* node, vector<int>& vec) {
if (node == nullptr) return;
traversal(node->left, vec);
vec.push_back(node->val);
traversal(node->right, vec);
return;
}
二叉树的迭代遍历
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> ans;
if (!root) return ans;
stack<TreeNode*> st;
st.push(root);
while (!st.empty()) {
TreeNode* cur = st.top(); st.pop();
ans.push_back(cur->val);
if (cur->right) st.push(cur->right);
if (cur->left) st.push(cur->left);
}
return ans;
}
};
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> ans;
if (root == NULL) return ans;
stack<TreeNode*> st;
st.push(root);
while (!st.empty()) {
TreeNode* cur = st.top(); st.pop();
if (cur == NULL) {
ans.push_back(st.top()->val);
st.pop();
}
else {
st.push(cur);
st.push(NULL);
if (cur->right) st.push(cur->right);
if (cur->left) st.push(cur->left);
}
}
return ans;
}
};
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> ans;
if (root == NULL) return ans;
stack<TreeNode*> st;
st.push(root);
while (!st.empty()) {
TreeNode* cur = st.top(); st.pop();
if (cur == NULL) {
ans.push_back(st.top()->val);
st.pop();
}
else {
if (cur->right) st.push(cur->right);
st.push(cur);
st.push(NULL);
if (cur->left) st.push(cur->left);
}
}
return ans;
}
};