理论基础
自己记笔记本上了
递归遍历
144.二叉树的前序遍历 Binary Tree Preorder Traversal
前序遍历:根左右
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> result;
Traversal(root, result);
return result;
}
};
145.二叉树的后序遍历 Binary Tree Postorder Traversal
后序遍历:左右根
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> result;
Traversal(root, result);
return result;
}
};
94.二叉树的中序遍历 Binary Tree Inorder Traversal
中序遍历:左根右
class Solution {
public:
void Traversal (TreeNode* cur, vector<int>& vec){
if (cur == NULL){
return;
}
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;
}
};
迭代遍历
144.二叉树的前序遍历 Binary Tree Preorder Traversal
前序遍历:根左右
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
stack<TreeNode*> st;
vector<int> result;
if (root == NULL){
return result;
}
st.push(root);
while (!st.empty()){
TreeNode* node = st.top();
st.pop();
result.push_back(node->val);
if (node->right){
st.push(node->right);
}
if (node->left){
st.push(node->left);
}
}
return result;
}
};
中序遍历
指针先遍历,先判断左,弹出中,判断右.
后序遍历
根左右 -> 根右左 | 前序中的左右进行相互调换
根右左 -> 左右根 | 然后直接对数组进行翻转