算法 -- 深度优先搜索和广度优先搜索

深度优先搜索(Depth-First-Search, DFS)和广度优先搜索(Breadth-First-Search, BFS)都是用于遍历和搜索树或图的算法,最开始接触这两个概念是学习二叉树的遍历时,因此,下面先从二叉树的遍历谈起,再通过leetcode上的几道题谈一谈个人对这两种算法的理解。因个人知识储备的问题,下面不涉及图的相关内容

二叉树的深度优先遍历

二叉树的深度优先遍历又分为:前序、中序和后序遍历,代码如下所述:

/*
struct Node {
	T data;
	Node *left, *right;

	Node(T elem) : data(elem), left(nullptr), right(nullptr){}
};
*/

void pre_order(Node *root){
	if(root == nullptr){
		return;
	}

	std::cout << root->data << ' ';
	pre_order(root->left);
	pre_order(root->right);
}

void in_order(Node *root){
	if(root == nullptr){
		return;
	}

	in_order(root->left);
	std::cout << root->data << ' ';
	in_order(root->right);
}

void post_order(Node *root){
	if(root == nullptr){
		return;
	}

	post_order(root->left);
	post_order(root->right);

你可能感兴趣的:(算法,算法,dfs)