#include "stdafx.h"

#include "stdlib.h"
#include "stdio.h"
#include <iostream>
#include <Windows.h> #define MaxSize 1000 using namespace std; typedef struct node
{
int num;
node * lchild;
node * rchild;
}; struct chain
{
node * Node;
chain * next;
}*head; typedef struct Stack
{
int data[MaxSize];
int top;
}; void postOrder(node *T,Stack s){
if(T != NULL)
{
s.top++;
s.data[s.top] = T->num; if(T->lchild == NULL && T->rchild == NULL){
for(int i = s.top; i > ; i--){
cout << s.data[i];
}
cout << endl;
} postOrder(T->lchild,s);
postOrder(T->rchild,s); }
} //每次新添加的节点加入链表尾部。
void AddNode(int Num)
{ node * NewNode = (node*)calloc(,sizeof (node));
NewNode->num = Num; node * FatherNode = head->Node; if(FatherNode->lchild == NULL)
FatherNode->lchild = NewNode; else if(FatherNode->rchild == NULL)
{
FatherNode->rchild = NewNode;
//如果右节点也添加了,则链表头移到下一个
head = head->next ;
}
else
return; chain *tail = head;
//找到链表尾
while (tail->next != NULL)
tail = tail->next; //添加新节点到链表尾
chain *Newtail = (chain*)calloc(,sizeof (chain));
Newtail->Node = NewNode;
tail->next = Newtail;
} int main()
{
//根节点
int k = ; // k层
node * root=(node*)calloc(,sizeof (node));
root->num=; head=(chain*)calloc(,sizeof (chain));
head->Node =root;
head->next =NULL; cout << "请输入N(N个二进制位,取值范围大于等于1):" << endl;
cin >> k; k = pow(2.0,k + ) - ; for(int N = ;N <= k;N++){
int tmp = N % ;
AddNode(tmp);
}
Stack s;
s.top = -; postOrder(root,s); system("pause"); return ;
}

参考:http://www.oschina.net/code/snippet_217193_12485

算法分为两个部分。第一,利用二叉树存储01值,在这部分中最重要的一点是利用了一个单链表保存树的每个节点。第二,就是利用栈作为组合的显示输出(其实是反方向输出,先进先显示)。

参考资料中的二叉树的生成方法不仅仅是满二叉树的生成方法。正如他说是按层生成树,我感觉不一定要是满二叉树。不过我的问题结构就是满二叉树。

生成N个二进制位的组合的更多相关文章

  1. 通过JS生成由字母与数字组合的随机字符串

    在项目中可能需要随机生成字母数字组成的字符,如生成3-32位长度的字母数字组合的随机字符串(位数不固定)或者生成43位随机字符串(位数固定) 使用Math.random()与toString()方法的 ...

  2. Java实现随机生成由字母、数字组合的N位随机数

    通过Math.random函数生成所需的字符所有序列,通过判断当前字符是否属于大小写.数字,符合者加入数组内,直到数组存储N位为止,最后把当前数组转为字符串返回调用处. /** * 随机生成由数字.字 ...

  3. 正交表生成工具 PICT 成对组合覆盖 收藏

    收藏:https://www.cnblogs.com/wmjperson/p/4557246.html

  4. dfs 生成排列和组合

    利用深度优先搜索的性质可以方便的生成n的排列和组合,但是生成组合时每个组合里面元素的个数必须事先确定,以前以为生成组合跟排列一样到n时就可以回溯,直到今天做了某题之后才发现那是错的,那样做生成不了所有 ...

  5. c# .Net随机生成字符串代码

    /// <summary> /// 随机生成字符串 /// </summary> /// <param name="OperationType"> ...

  6. 软件工程启程篇章:C#和四则运算生成与运算

    0x01 :序言 I leave uncultivated today, was precisely yestoday perishes tomorrow which the person of th ...

  7. 随机数的组合问题(JavaScript描述)

    随机数的组合问题在面试时是经常考的,比如之前我就被问到:“有一个可以生成1-5的随机数函数,怎样把它扩大到1-7?” 在解决这个问题之前,先来看看另外一个比较简单的问题:“有一个可以生成1-7的函数, ...

  8. 使用php生成数字、字母组合验证码

    项目中经常会遇到一些登陆验证,支付验证等等一系列安全验证的策略.实现方法多种多样,下面就来讲解下如何用php生成简单的文字+数字组合的验证码: 所用语言php,gd库 原理解释: a>实质上是在 ...

  9. 关于TM影像各波段组合的简介

    321:真彩色合成,即3.2.1波段分别赋予红.绿.蓝色,则获得自然彩色合成图像,图像的色彩与原地区或景物的实际色彩一致,适合于非遥感应用专业人员使用. 432:标准假彩色合成,即4.3.2波段分别赋 ...

随机推荐

  1. C 语言学习的第 05 课:了解课程配套的平台

    在此之前,已经同授课老师沟通,确认课程的配套平台是Coding.net.对于大多数(甚至是全部)同学来说,这个平台应该是极其陌生的.不过不用担心,且还是娓娓道来. 定义:Coding.net是一个集代 ...

  2. Ubuntu更改右键菜单

    方法/步骤1.这是我们在桌面文件夹ubuntugege上打开的右键菜单,你说你在~/.gnome2/nautilus-scripts/添加的右键菜单项目但它就是没有显示呀,于是你觉得Ubuntu 12 ...

  3. 如何实现侧边栏菜单之间的分割线——不用border-bottom

    相信大家都遇到过这样一个老生常谈的问题,就是如果当我们所要做的菜单是侧边栏,垂直方向自上而下的排列的菜单栏,我们在做的时候通常的构想是这样的,就是在每两个菜单之间添加分割线,通常的想法就是说给每个菜单 ...

  4. 为Mac Terminal设置代理

    参考链接:http://tz101.github.io/new-mac-os-x-yosemite-10-10-Xcode-Brew-Shadowsocks-Proxychains/ https:// ...

  5. 生产环境下案例 No space left on device (inode使用满的情况)

    第一种情况: 问题: 如果想磁盘写入数据提示如下错误: No space left on device. 通过df -h查看磁盘空间,发现没满,请问可能原因是什么? 解答: 可能是inode数量被消耗 ...

  6. 常用数据库高可用和分区解决方案(2) — MongoDB篇

    MongoDB是当前比较流行的文档型数据库,其拥有易使用.易扩展.功能丰富.性能卓越等特性.MongoDB本身就拥有高可用及分区的解决方案,分别为副本集(Replica Set)和分片(shardin ...

  7. PHPStorm2016如何安装主题

    今天放出如何安装phpstorm 主题教程,教程如下: 下载主题 地址:phpstoorm-themes.com 安装主题 PhpStorm and WebStorm themes can be in ...

  8. “Ceph浅析”系列之七——关于Ceph的若干想法

    本篇文章的内容,主要是笔者在调研分析Ceph过程中产生的一些思考.因为其中的内容比较自由发散,且大多是笔者的个人见解,故此另启一文进行讨论. 关于Ceph的性能 目前为止,本系列的文章中没有涉及到Ce ...

  9. 【BZOJ-3337】ORZJRY I 块状链表

    3337: ORZJRY I Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 190  Solved: 50[Submit][Status][Discu ...

  10. springMVC-HelloWorld

    1.加入包 2.web.xml 3.利用spring-tool来新建一个springmvc的配置文件 关键步骤,选择创建一个Spring Bean Definition filer 然后next,然后 ...