深度优先搜索
其实是一种递归的思想。
前序遍历:
void dfs(TreeNode* root){
if(root==nullptr)
return;
process(root->val); //当前节点数据处理
dfs(res,root->left);
dfs(res,root->right);
}
中序遍历:
void dfs(TreeNode* root){
if(root==nullptr)
return;
dfs(res,root->left);
process(root->val);
dfs(res,root->right);
}
后序遍历:
void dfs(TreeNode* root){
if(root==nullptr)
return;
dfs(res,root->left);
dfs(res,root->right);
process(root->val);
}
广度优先搜索
以二叉树的遍历为例子。就是一层一层的遍历。用队列可以实现。
vector<vector<int>> levelOrder(TreeNode* root) {
if(root==nullptr)
return vector<vector<int>>();
queue<TreeNode*> Q; //队列
Q.push(root);
vector<vector<int>> res; //存每一层的数据
while(!Q.empty()){
int size = Q.size(); //当前层大小
res.push_back(vector<int>());
for(int i=0;i<size;i++){
TreeNode* node = Q.front();
Q.pop();
res.back().push_back(node->val);
if(node->left)
Q.push(node->left);
if(node->right)
Q.push(node->right);
}
}
return res;
}
B站上一个比较通俗的视频讲解:python数据结构与算法系列课程