二叉树-求{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万+

微生物测序分析LEfSe

LEfse分析定义 LEfse分析即LDA Effect Size分析,可以实现多个分组之间的比较,还进行分组比较的内部进行亚组比较分析,从而找到组间在丰度上有显著差异的物种(即biomaker);

宁生信 5万+

组合数学入门

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

Flyzz的博客 475

Vue项目实战:用DataV的dv-scroll-board打造高颜值滚动表格(附完整代码)

本文详细介绍了如何在Vue项目中使用DataV的dv-scroll-board组件打造高颜值滚动表格。从基础集成到高级配置,包括动态数据处理、深度样式定制、性能优化策略以及交互增强方案,帮助开发者快速实现企业级数据展示需求。特别针对样式优化和滚动表格的常见问题提供了实用解决方案。

weixin_30892037的博客 499

C++11并发与多线程笔记(2) 线程启动、结束,创建线程多法、join,detach

第二节 线程启动、结束,创建线程多法、join,detach 一、范例演示线程运行的开始 程序运行起来,生成一个进程,该进程所属的主线程开始自动运行;当主线程从main()函数返回,则整个进程执行完毕 主线程从main()开始执行,那么我们自己创建的线程,也需要从一个函数开始运行(初始函数),一旦这个函数运行完毕,线程也结束运行 整个进程是否执行完毕的标志是:主线程是否执行完,如果主线程执行完毕了,就代表整个进程执行完毕了,此时如果其他子线程还没有执行完,也会被强行终止【此条有例外,以后会解释】 创建

qq_38231713的博客 1万+

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

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

weixin_41940752的博客 494

基于车辆运动学的规划算法 - Hybrid A*/ State Lattice Planning (前置知识:自行车模型、Dubins、Reeds Shepp、多项式曲线、螺旋曲线)

本文将按顺序讲解基于车辆运动学的规划算法,以及需要的前置知识:自行车模型、Dubins和Reeds Shepp曲线、多项式曲线和螺旋曲线

BigDavid123的博客 4860

求解集合的子集

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

JingleLiA的博客 575

SIGIR 2026:信息检索前沿技术与投稿指南

信息检索(Information Retrieval, IR)是计算机科学中处理大规模数据检索的核心技术,其基本原理是通过算法模型从海量数据中高效提取相关信息。随着深度学习的发展,神经信息检索(Neural IR)和多模态检索成为研究热点,如稠密检索模型(DPR)和跨模态预训练(CLIP)等技术的应用显著提升了检索精度。这些技术不仅在学术领域具有重要价值,还在电商搜索、医疗检索等实际场景中展现出巨大潜力。SIGIR作为信息检索领域的顶级会议,汇聚了全球顶尖学者和工业界专家,是展示最新研究成果的重要平台。本文

weixin_29189363的博客 287

ADB详细(从下载安装到灵活运用)

ADB(Android Debug Bridge)是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell(可用来在模拟器或连接的设备上运行各种命令)的访问。可以在Android SDK/platform-tools中找到 adb 工具或下载ADB Kits。

LiuYong_01的博客 10万+

算法实现题 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

【100%通过率】华为od统一考试B卷【需要打开多少监视器】JAVA&Go 实现

某长方形停车场,每个车位上方都有对应监控器,当且仅当在当前车位或者前后左右四个方向任意一个车位范围停车时,监控器才需要打开:给出某一时刻停车场的停车分布,请统计最少需要打开多少个监控器

MISAYAONE的博客 1万+

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

给定一个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

C#上位机+YOLO实时目标检测:摄像头采集+多线程推理+精度调优全流程

标注数据集:使用LabelImg工具标注目标对象,按YOLO格式整理数据集;模型训练:使用Ultralytics库训练自定义模型,提升特定目标的检测精度;训练参数优化:增加训练轮数(epochs=100200)、调整批次大小(batch=1632)、使用数据增强(flip、mosaic等)。摄像头采集:封装通用采集类,支持USB摄像头/网口相机,实现稳定帧读取与异常处理;多线程推理:采用“采集线程+推理线程+UI线程”解耦架构,使用线程安全队列传递帧数据,彻底解决界面卡顿;核心封装。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 673

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

位运算表示集合的整数

表达方式 代码实现表达方式将一个集合{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

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值