1.基本概念
DFS深度优先遍历:沿着树的深度遍历树的节点,先访问根结点,然后是左子树,右子树
BFS广度优先遍历:横向遍历,沿着树的宽度,先访问根结点,然后左右子节点。然后是上述左右子节点的子节点,一层一层往下。
以下图为例:
DFS的结果为【ABDECFG】
BFS的结果为【ABCDEFG】
2.递归实现
void DFS(TreeNode* root, vector<int>& ans) {
if (root == NULL)
return;
ans.push_back(root->val);
DFS(root->left, ans);
DFS(root->right, ans);
}
3.非递归实现
DFS使用stack,先进后出,先入栈的节点后访问