深度优先遍历 包括三种: 前中后 序 三种 遍历; 这三种遍历都可以通过 递归的方法解决;
递归的条件:
-
确定递归函数输出类型, 递归函数的输入参数; -
递归函数中的 终止条件; -
每一递归中, 所需要执行的操作;
此时大家可以做一做leetcode上三道题目,分别是:
144.二叉树的前序遍历 94.二叉树的中序遍历 145.二叉树的后序遍历
1. 前序遍历的递归方式
递归函数的编写;
先序遍历函数:
- 新建vector 容器,用于存放遍历的结果;
- 调用递归函数;
- 返回 遍历结果;
#include "vector"
using namespace std;
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x): val(x), left(nullptr), right(nullptr){}
};
class Solution1{
public:
void traversal(TreeNode* cur, vector<int>& res){
if( cur == nullptr) return;
res.push_back(cur->val);
traversal(cur->left, res);
traversal(cur->right, res);
}
vector<int> preOrder(TreeNode* root){
vector<int> result;
traversal(root, result);
return result;
}
};
2. 中序遍历的递归方式;
class Solution2{
public:
void traversal(TreeNode* cur, vector<int>& res){
if(cur == nullptr) return;
traversal(cur->left, res);
res.push_back(cur->val);
traversal(cur->right, res);
}
vector<int> inOrder(TreeNode* root){
vector<int> result;
traversal(root, result);
return result;
}
};
3.后序遍历的 递归方式
class Solution3{
public:
void traversal(TreeNode* cur, vector<int>& res ){
if(cur == nullptr) return;
traversal(cur->left, res);
traversal(cur->right, res);
res.push_back(cur->val);
}
vector<int> postOrder(TreeNode* root){
vector<int> result;
traversal(root, result);
return result;
}
};
|