从集合A的每个元素来看,它只有两种状态:它或者属幂集的元素集,或不属幂集的元素集。则求幂集p(A)的元素的过程可看成是依次对集合A中元素进行取舍过程,并且可以用一棵二叉树(下图),来表示过程中幂集元素的状态变化过程。其中树中的根结点表示幂集元素的初始状态(为空集),叶子结点表示它的终结状态。
因此求幂集元素的过程即先序遍历这棵状态树的过程。所以可以用递归和非递归两种方法求解。
#include<iostream>
#include<stack>
#include<list>
#include<cmath>
#include<cctype>
#include<vector>
#include<queue>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<fstream>
#include<algorithm>
using namespace std;
void Print(vector<int> &v)
{
vector<int>::i