一.递归算法三要素:
1.确定递归函数的参数和返回值;
2.确定终止条件;
3.确定单层递归逻辑。
二.二叉树的三种递归遍历方式
1.前序遍历
class Solution {
public:
void traversal(TreeNode* root, vector<int>& ans) {
//前序遍历
//终止条件
if(root == nullptr) {
return ;
}
//单次递归逻辑:中左右
ans.push_back(root->val);
//递归左右
traversal(root->left, ans);
traversal(root->right, ans);
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> ans;
traversal(root, ans);
return ans;
}
};
2.中序遍历
class Solution {
public:
void traversal(TreeNode* root, vector<int>& ans) {
//中序遍历
//终止条件
if(root == nullptr) {
return ;
}
//单次递归逻辑:左中右
traversal(root->left, ans);
ans.push_back(root->val);
traversal(root->right, ans);
}
vector<int> inorderTraversal(TreeNode* root) {
vector<int> ans;
traversal(root, ans);
return ans;
}
};
3.后序遍历
class Solution {
public:
void traversal(TreeNode* root, vector<int>& ans) {
//后序遍历
//终止条件
if(root == nullptr) {
return ;
}
//单次递归逻辑:左右中
//递归左右
traversal(root->left, ans);
traversal(root->right, ans);
ans.push_back(root->val);
}
vector<int> postorderTraversal(TreeNode* root) {
vector<int> ans;
traversal(root, ans);
return ans;
}
};
三.总结
二叉树中开始涉及到很多的递归和迭代,因为自己是第一遍刷二叉树的算法题,算法内容可能比较单一,接下来会接着总结二叉树的知识。这是第一次写博客,是自己刷leetcode题目的一些总结吧。文章内容参考公众号:代码随想录。