#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. display:block、display:inline与displayinline:block的概念和区别

    总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-level elements (块级元素) 和 inline elements (内联元素).block元素通 ...

  2. git创建仓库

    创建仓库 git init: Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令. ...

  3. Andriod ADB开启Activity、Service以及BroadCast(包括参数的传递)

    /*****************开启Activity  并传递参数*******************/ 使用am命令启动Activity并传递参数的方法,也能用作C层与Java进行数据传递的一 ...

  4. nginx安装配置+清缓存模块安装

    经过一段时间的使用,发现nginx在并发与负载能力方面确实优于apache,现在已经将大部分站点从apache转到了nginx了.以下是nginx的一些简单的安装配置. 环境 操作系统:CentOS. ...

  5. 关于mysql数据库行级锁的使用(一)

    项目上一个业务需要对某条数据库记录加锁,使用的是mysql数据库 因此做了一个关于mysql数据库行级锁的例子做测试 package com.robert.RedisTest; import java ...

  6. CentOS 6.5升级Python和安装IPython(亲测可用)

    python的升级(2.6------>2.7.x) 如下地址:http://note.youdao.com/share/?id=2928aeda020123bfdf2a2c76bc75e4a7 ...

  7. HTML5文件系统API和资料整理

    来着火狐开发网络的官方文档:点我打开 : W3C的官方文档: 点我打开 : 园友的博客:  点我打开: 浏览器兼容性, 好了就chrome支持, 我刚刚更新的火狐37也不支持, nice, 太nice ...

  8. js-处理金额(正则表达式)

    function checkRates(str){ var re = /^(([1-9][0-9]*\.[0-9][0-9]*)|([0]\.[0-9][0-9]*)|([1-9][0-9]*)|([ ...

  9. Maven-搭建maven web项目

    点击Eclipse菜单File->New->Other->Maven->Maven Project 在选择maven-archetype的界面进行如下操作:(其他选项基本与创建 ...

  10. 让script的type属性等于text/html

    type属性为text/html的时候,<script>片断中定义一个被JS调用的代码,代码不会在页面上显示 <script id="commentTemplate&quo ...