topic
144. Preorder traversal of binary tree: give you the root node of the binary tree root
, return the preorder traversal of its node value
94. Inorder traversal of a binary tree: give you the root node of a binary tree root
and return an inorder traversal of its node value
145. Post-order traversal of binary tree: give you the root node of the binary tree root
, return the post -order traversal of its node value
code
- Traverse a binary tree using recursion
Preorder, inorder, and postorder are all depth-first traversal algorithms
- prologue
class Solution {
public:
void Traversal(TreeNode* cur, vector<int>& vec) {
if (cur != nullptr) {
vec.push_back(cur->val);
Traversal(cur->left, vec);
Traversal(cur->right, vec);
}
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
Traversal(root, result);
return result;
}
};
- Intermediate sequence
class Solution {
public:
void Traversal(TreeNode* cur, vector<int>& vec) {
if (cur != nullptr) {
Traversal(cur->left, vec);
vec.push_back(cur->val);
Traversal(cur->right, vec);
}
}
vector<int> inorderTraversal(TreeNode* root) {
vector<int> result;
Traversal(root, result);
return result;
}
};
- post-order
class Solution {
public:
void Traversal(TreeNode* cur, vector<int>& vec) {
if (cur != nullptr) {
Traversal(cur->left, vec);
Traversal(cur->right, vec);
vec.push_back(cur->val);
}
}
vector<int> postorderTraversal(TreeNode* root) {
vector<int> result;
Traversal(root, result);
return result;
}
};
- Iteratively traverse a binary tree
- prologue
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
stack<TreeNode*> st;
if (root == nullptr) return result;
st.push(root);
while (!st.empty()) {
//栈不空
TreeNode* p = st.top();
result.push_back(p->val);
st.pop(); //先将栈顶的结点出栈
if (p->right != nullptr) st.push(p->right); //右孩子不空则入栈
if (p->left != nullptr) st.push(p->left); //左孩子不空则入栈
}
return result;
}
};
- Intermediate sequence
在这里插入代码片
- post-order
在这里插入代码片