二叉树-求{0,1....n-1}的非空子集
来源:互联网 发布:ubuntu中查看文件夹 编辑:程序博客网 时间:2024/04/29 12:07
今天有同学问了下我怎么编程实现求集合{0,1….n-1}的非空子集合,我发现这恰好是一棵满二叉树的题,可以用二叉树求解。
代码如下:
#include <iostream>using namespace std;#include <stdlib.h>int n ;int flag[20]; typedef struct binary_tree{ int data; struct binary_tree *lchild, *rchild;}bin_node, *bin_tree;void Create(int n, bin_tree &T, int flag) //递归创建二叉树{ if(n == -1) //n=-1时,二叉树深度到底 { return ; } T = (bin_tree)malloc(sizeof(bin_node)); T->lchild = NULL; //初始化 T->rchild = NULL; //初始化 if(flag == 0) T->data = 0; //左子树赋为0 else T->data = 1; //右子树赋为1 Create(n-1, T->lchild, 0); //递归创建左子树 Create(n-1, T->rchild, 1); //递归创建右子树}void pre_view(bin_tree T, int rank) //前序遍历{ if(T != NULL) { flag[rank] = T->data; //将一个分支上的所有结点值记录下来 if(rank == n+1) //深度到底 { int temp = 0; //判断是否输出回车 for(int i = n+1; i >= 1; i--) { if(flag[i] == 1) { cout<<n-i+1<<" "; //升序输出子集合 temp = 1; } } if(temp == 1) { cout<<endl; } } } if(T->lchild != NULL) { pre_view(T->lchild, rank+1); //递归前序遍历 } if(T->rchild != NULL) { pre_view(T->rchild, rank+1); //递归前序遍历 } }int main(){ int rank = 1; bin_tree T = NULL; cin>>n; n += 1; Create(n, T, 0); pre_view(T, rank); return 0;}
忘了写free()了。。。。这是个不好的习惯。下次有空加上。
求非空子集合还可以用二进制或者递归这两种方法解决。但是我刚好学了二叉树,就当巩固了。
0 0
- 二叉树-求{0,1....n-1}的非空子集
- 求集合元素的所有非空子集
- 非递归求n个元素的所有子集
- 字符串的非空子集
- 证明:一个有n个结点的非空二叉树的高度至少为lgn
- 证明:一个有n个结点的非空二叉树的高度至少为lgn
- 非空子集个数
- 求集合{1, 2, ..., n}的所有子集
- 子集算法(PHP): 求一个非空集合的子集
- 求集合{1,2,...,n}的长度小于M(M<=n)的所有子集
- 求集合{1,2,...,n}的长度等于M(M<n)的所有子集
- 非空子集个数计算
- 求二叉树的高度(非递归)
- 非递归求二叉树的深度
- 列出一个集合的所有非空子集
- 利用格雷码找出集合的所有非空子集
- 字符串的所有组合(非空子集)
- 求n个数的子集的三种思路
- PHP 读取 大文件 解决方法
- 将javaweb部署到SAE上,并且连接数据库
- 微信小程序报错
- #ifndef#define#endif的用法
- 2016.10.07【初中部 NOIP提高组 】模拟赛C
- 二叉树-求{0,1....n-1}的非空子集
- 机器学习经典文章链接
- 51nod 1201
- 无题
- 【Docker江湖】之docker部署与理解
- c#Bug Unknown column “张三” in 'where clause'问题解决
- 数据库相关中间件收录集
- Compile,Make和Build的区别
- 我认可的数码品牌