算法笔记
本次算法笔记主要学习二叉树的三种遍历,分别是前中后序三种遍历的递归方式,没什么难度,主要记住三种遍历的顺序,前序为中左右,中序为左中右,后序为左右中,记住顺序就很好写了。
题目描述
解题步骤
1. 选择参数: 需要一个存放结果的一维数组result,还需要根节点即可。
2. 终止条件: 当节点遍历完为nullptr时,则终止。
3. 递归: 主需要知道三类遍历的顺序即可。
代码实现
结构体
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
前序
class Solution {
public:
void traversal(TreeNode* root, vector<int>& result) {
if(root == nullptr) {
return;
}
result.push_back(root -> val);
traversal(root -> left, result);
traversal(root -> right, result);
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
traversal(root, result);
return result;
}
};
中序
class Solution {
public:
vector<int> result;
void traversal(TreeNode* root) {
if(root == nullptr) {
return;
}
traversal(root -> left);
result.push_back(root -> val);
traversal(root -> right);
}
vector<int> inorderTraversal(TreeNode* root) {
traversal(root);
return result;
}
};
后序
class Solution {
public:
void traversal(TreeNode* root, vector<int>& result) {
if(root == nullptr) {
return;
}
traversal(root -> left, result);
traversal(root -> right, result);
result.push_back(root -> val);
}
vector<int> postorderTraversal(TreeNode* root) {
vector<int> result;
traversal(root, result);
return result;
}
};
结语
本题文本内容比较少,多为代码部分,题目难度也不是很大。