文章目錄
前序遍歷 pre-order
Recursive
void preorderTraversal(TreeNode* root, vector<int>& res) {
if (root) {
res.push_back(root);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
}
Non-Recursive
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> s;
TreeNode* node = root;
while (node || !s.empty()) {
while (node) {
res.push_back(node->val);
s.push(node);
node = node->left;
}
node = s.top();
s.pop();
node = node->right;
}
return res;
}
中序遍歷 in-order
Recursive
void inorderTraversal(TreeNode* root, vector<int>& res) {
if (root) {
preorderTraversal(root->left);
res.push_back(root);
preorderTraversal(root->right);
}
}
Non-Recursive
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> s;
TreeNode* node = root;
while (node || !s.empty()) {
while (node) {
s.push(node);
node = node->left;
}
node = s.top();
s.pop();
res.push_back(node->val);
node = node->right;
}
return res;
}
後序遍歷 post-order
Recursive
void postorderTraversal(TreeNode* root, vector<int>& res) {
if (root) {
preorderTraversal(root->left);
preorderTraversal(root->right);
res.push_back(root);
}
}
Non-Recursive
vector<int> postorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> s;
TreeNode* node = root;
while (node || !s.empty()) {
while (node) {
res.insert(res.begin(), node->val);
s.push(node);
node = node->right;
}
node = s.top();
s.pop();
node = node->left;
}
return res;
}
2020/4 Karl