二叉树-求{0,1....n-1}的非空子集

编写一个程序,对输入的任意正整数n,打印出集合{0,1,…,n-1}的所有子集。 阅读详情

今天有同学问了下我怎么编程实现求集合{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()了。。。。这是个不好的习惯。下次有空加上。
求非空子集合还可以用二进制或者递归这两种方法解决。但是我刚好学了二叉树,就当巩固了。

A的所有非空子集 题目描述 请编写一个方法,返回某集合的所有非空子集。 给定一个int数组A和数组的大小int n,请返回A的所有非空子集。保证A的元素个数小于等于20,且元素互异。各子集内部从大到小排序,子集之间字典逆序排序,见样例。 测试样例: [123,456,789] 返回:{[789,456,123],[789,456],[789,123],[789],[456 123],[456],[123]... 阅读详情

相关推荐

【信息科学与工程学】【数据科学】数据科学领域——第三篇 数学08 几何学07 网络几何01

编号类型领域问题问题的数学分析参数列表及参数的数值范围关联知识1组合优化 / 计算几何网络几何(几何图论):给定平面上的 n 个点(节点),求连接所有点的总边长最小的树。数学模型:设点集 P={p1​,…,pn​}⊂R2,边权为欧氏距离 d(pi​,pj​)=(xi​−xj​)2+(yi​−yj​)2​。目标是找到一棵生成树 T=(P,E)使得 ∑(i,j)∈E​d(pi​,pj​)最小。该问题是经典 MST 在欧氏度量下的特例,属于 NP-hard 吗?

weixin_49199313的博客 167

(使用C语言详解)求一个集合的全部子集(leetcode编程笔记)

这个算法的关键在于理解如何使用二进制数来表示和生成子集。每个子集都可以通过改变tag的某一位来得到下一个子集。当tag的某一位被设置为1时,表示对应数组元素被包含在子集中;当该位被设置为0时,表示对应元素不被包含。通过这种方式,我们可以遍历所有可能的子集。

StarPrayers.的博客 3362

【信息科学与工程学】【数据科学】数据科学领域-第三篇 数学基础04 集合论01

集合论

weixin_49199313的博客 1486

求集合的所有非空子集

某个集合有n个元素,它的所有子集数(包括空集和自己)为2^n,有两种办法,一种是位图法(任一个元素选取或不选取),另一种办法是递归法: // File name: main.m #include <iostream> #include <vector> #include "Subset.hpp" using namespace std; int main(int argc, const char * argv[]) { char s[] = "abcd"; .

acalism的专栏 1998

【管理科学】第三十五篇 企业经营中的管理科学01 权力、风险、运营、物流、人力资源、库存、合同、品牌、业绩、项目

编号类型领域子领域/内容问题问题的数学分析(电磁/信息论/数学物理/数学化学/界面科学/表面科学 + 几何/拓扑/代数/集合论/图论/数论/函数评估/数值估计/概率/统计/向量/张量/矩阵/矢量 + 其他)算法逐步推理思考的数学表达式及实现步骤及时序流程 参数列表及参数的数值范围及数值分析及常量/常数1管理科学问题运营管理生产计划如何分配有限资源生产多种产品以最大化利润?线性代数、凸优化、单纯形法;向量与矩阵目标函数 max c^T x,约束 Ax ≤ b, x ≥ 0。步骤:①标准化引入松弛变量;②构建初

weixin_49199313的博客 247

【信息科学与工程学】计算机科学与自动化——第三百零五篇 计算机系统中的各类运算操作01

编号类型领域运算操作运算类型算法算法的详细设计及数学分析参数列表及参数的数值设计应用场景 (100+条)集合运算​1集合运算关系代数并集 (Union)集合运算归并排序去重合并两个集合,去除重复元素。时间复杂度 O(n+m),n,m为两集合大小。输入:集合A, B。输出:A∪B。数据集成、多表结果合并、去重后的全量数据提取。2集合运算关系代数交集 (Intersection)集合运算哈希交集找出同时属于两个集合的元素。平均时间复杂度 O(min(n,m)),最坏 O(n*m)。输入:集合A, B。输出:A∩

weixin_49199313的博客 1389

列出一个集合的所有非空子集

整体思路 description: 我们先看一个例子 A={a, b ,c ,d} 非空子集有 {a}      |-->{a, b ,c }-->{a, b ,c ,d} {a, b}-->|      |-->{a, b ,d}   {a, c}-->{a, c ,d} {a, d} {b}      {b, c}-->{b ,c ,d} {b, d}

三月软件工作室--任忌 5230

输出集合的所有子集

用于输出一个集合的所有子集,采用两种方法实现,值得一看!

求集合元素的所有非空子集

现有一个包含N个元素的集合S,求集合S的所有非空子集? 例如:集合S包含三个元素{a, b, c},则它的所有非空子集为: {a}, {b}, {c}, {a, b}, {a, c}, {b, c} 和{a, b, c}。 这里先用位操作的思路来求解,具体方法:用2进制Bit位来标记集合中的某个元素是否被选中,1代表选中,0代表未选中。例如集合{a, b, c}的所有子集可如下表示: {

marho 7548

集合划分问题

N个元素的集合{1,2,3...,n}可以划分为若干个非空子集。例如,当n=2时,集合{1,2,3}可以划分为2个不同的非空子集如下:{{1},{2}},{{1,2}}。编程任务:给定正整数N,计算出N个元素的集合{1,2,3,.....n}可以划分为多少个不同的非空子集。

求集合的所有子集

给定一个非空的集合,用递归算法输出它的所有子集。由文件input.txt 提供输入数据。文件第1行是集合中的元素个数,第2行是集合的元素序列(元素之间用空格分隔)。将计算出的所有子集分行输出到文件output.txt中。

离散数学复习笔记(已完结)

本篇为《离散数学》学科的个人复习笔记,知识点有所偏重,课本是上海科学技术文献出版社左孝凌版的《离散数学》。

CK_0ff的博客 5万+

Windows 必看!OpenClaw 一键安装教程|告别报错,一次成功不踩坑

OpenClaw 完整安装与配置的全流程教程

m0_70389289的博客 1085

组合数学入门

组合数学入门 卡特兰数 以下摘自OI-wiki: 一位大城市的律师在她住所以北n个街区和以东n个街区处工作。每天她走2n个街区去上班。如果他从不穿越(但可以碰到)从家到办公室的对角线,那么有多少条可能的道路? 在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数? 对角线不相交的情况下,将一个凸多边形区域分成三角形区域的方法数? n个结点可构造多少个不同的二叉树? ... 通项公式\textbf通项公式通项公式 H(n)=(2nn)

Flyzz的博客 475

从零构建物联网数据中台:MQTT协议、Node.js服务、MongoDB与InfluxDB双存储及React可视化实战

本文详细介绍了从零构建物联网数据中台的完整实战方案。通过采用MQTT协议作为设备通信标准,结合Node.js搭建高并发数据处理服务,并创新性地使用MongoDB与InfluxDB双存储架构分别管理设备元数据与海量时序数据,最后利用React构建了实时数据可视化控制台。该架构有效解决了物联网项目中数据异构、查询性能低下等核心痛点,为构建高效、可扩展的物联网平台提供了清晰路径。

weixin_28432777的博客 288

Node-Red系列教程——NodeRed通过OPC UA读取数据并写入mysql

NodeRed通opcua读取西门子数据并存入mysql

鲸鱼姐的专栏 1万+

机器学习十大常用算法汇总

1.决策树     以一个根节点开始,每一个节点提出一个问题,基于feature将数据分为两类,再子节点上再继续提问。每个节点上的问题和分类规则是根据已有的训练数据学习出来的。   决策树通常有三个步骤:特征选择、决策树的生成、决策树的修剪。 上图为一个决策树流程图,正方形代表判断模块,椭圆代表终止模块,表示已经得出结论,可以终止运行,左右箭头叫做分支。 如果一个特征具有更好的分类能力,或...

weixin_41940752的博客 494

MIPI信号的分析--结合示波器实际测试波形

如果排查的思路对你有帮助,请记住 消雨匆匆 or 大吊工。码字和排查很累,仅此而已 ,硬件不是抄电路,拿烙铁,懂点软件,细致分析,找问题和破案搜集线索是一样的。 部分内容来自于此博客的大神总结: http://www.elecfans.com/news/wangluo/20170323499614.html http://www.elecfans.com/yuanqijian/jieko...

消雨匆匆 4万+

求解集合的子集

描述:求解集合{0,1,2,........,n-1}的子集;思路:利用二进制思想,如果在集合中某位数存在,那么对应的二进制的相应位数即为1。比如,集合{1,4,5,7}对应的二进制表示为:10110010(从右往左数),因此如果我们确定了一个二进制序列,对应的也就确定了一个集合。此外,集合的运算可以利用&amp;,|,^,运算符,依次等价于集合的交集,并集和对称差集。实质:将子集的每一种排列对应...

JingleLiA的博客 575

GAN实战:用Python和TensorFlow打造你的第一个生成对抗网络(附完整代码)

本文是一份详细的GAN实战指南,指导读者使用Python和TensorFlow框架从零开始构建并训练一个生成对抗网络。文章涵盖了环境搭建、MNIST数据预处理、生成器与判别器模型构建、对抗性损失函数定义、训练循环编写以及关键的调试技巧,旨在帮助开发者通过动手实践深入理解GAN的核心原理与实现过程。

php55的博客 480

使用node-red网关读取modbus设备点表,并上传到市政低碳平台来统计数据

最近做了一个物联网项目,具体是这样的,利用node-red网关盒子,来采集Modbus设备的点表,然后将数据转换,封装,最终上传到市政的低碳平台。上一步封装了点表的数据,调用低碳平台还需要账号密码,建筑id,这些都是固定信息,所以我们单独提出来。上一步获取到了原始的点表数据,下一步就是将这些点表数据与在低碳平台创建的采集的对应起来,并且设置好分类。读取modbus的节点,会有两个输出,我是使用的第一个输出。msg.meters 是一个数组,里面的每一个元素都是一个点表,比如厨房用水,园区照明,

知无涯 948

算法实现题 2-11 集合划分问题

问题描述: n 个元素的集合{1,2,…, n }可以划分为若干个非空子集。例如,当 n=4 时,集合{1,2, 3,4}可以划分为 15 个不同的非空子集如下: {{1},{2},{3},{4}}, {{1,2},{3},{4}}, {{1,3},{2},{4}}, {{1,4},{2},{3}}, {{2,3},{1},{4}}, {{2,4},{1},{3}}, {{3,4},{1},{2}}, {{1,2},{3,4}}, {{1,3},{2,4}}, {{1,4},{2,3}}, {{1,2,3}

YKYBTao的博客 3408

C和C++Everything教程的简介

C和C++Everything教程的简介 C和C++Everything教程,该专栏目前已有8000博文,订阅该专栏相当于同时订阅以下所有收费专栏

希望我的博客,能帮上你解决学习中工作中所遇到的问题 4392

请编写一个方法,返回某集合的所有非空子集。

给定一个int数组A和数组的大小int n,请返回A的所有非空子集。保证A的元素个数小于等于20,且元素互异。各子集内部从大到小排序,子集之间字典逆序排序,见样例。  测试样例:[123,456,789]  * 返回{[789,456,123],[789,456],[789,123],[789],[456 123],[456],[123]}  */ 1.先写一个算法,请返回A的所有子集

悦然的博客 2569

双端之Nginx+Php结合PostgreSQL搭建Wordpress

制作的 PG4WP 分支版本,它与所有版本的 WordPress 兼容,解决了原版的一些问题。参数,确保 PostgreSQL 正在监听默认端口(通常是 5432),或者你自定义的端口。:PG4WP 插件存在缺陷和不完整的功能,可能与最新版本的 WordPress 不兼容。的插件,它允许 WordPress 使用 PostgreSQL 数据库。,如果看到 Nginx 的默认欢迎页面,说明 Nginx 已正确安装。,如果看到 Nginx 的默认欢迎页面,说明 Nginx 已正确安装。

宇宙第一小趴菜的博客 1891

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

位运算表示集合的整数

表达方式 代码实现表达方式将一个集合{0,1,2,3,……,n-1}的子集s用二进制编码可以编码为如下整数 f(s)=∑i∈s2if(s)=\sum_{i\in s}{2^i} 在这种编码下,我们就可以用位运算来表示集合的一些运算,具体例子如下: 空集 ∅\emptyset : 0; 只含有第i个元素的子集 {i} :1<<i1<<i; 含有全部n个元素的集合 {0,1,2,…….,n-

fanyiningHH的博客 737

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: 数据结构与算法学习-快速幂取模
下一篇: linux如何把普通用户添加到sudo组
UKey_
博客等级 码龄10年 258粉丝 186原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值