生成N个二进制位的组合
#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个二进制位的组合的更多相关文章
- 通过JS生成由字母与数字组合的随机字符串
在项目中可能需要随机生成字母数字组成的字符,如生成3-32位长度的字母数字组合的随机字符串(位数不固定)或者生成43位随机字符串(位数固定) 使用Math.random()与toString()方法的 ...
- Java实现随机生成由字母、数字组合的N位随机数
通过Math.random函数生成所需的字符所有序列,通过判断当前字符是否属于大小写.数字,符合者加入数组内,直到数组存储N位为止,最后把当前数组转为字符串返回调用处. /** * 随机生成由数字.字 ...
- 正交表生成工具 PICT 成对组合覆盖 收藏
收藏:https://www.cnblogs.com/wmjperson/p/4557246.html
- dfs 生成排列和组合
利用深度优先搜索的性质可以方便的生成n的排列和组合,但是生成组合时每个组合里面元素的个数必须事先确定,以前以为生成组合跟排列一样到n时就可以回溯,直到今天做了某题之后才发现那是错的,那样做生成不了所有 ...
- c# .Net随机生成字符串代码
/// <summary> /// 随机生成字符串 /// </summary> /// <param name="OperationType"> ...
- 软件工程启程篇章:C#和四则运算生成与运算
0x01 :序言 I leave uncultivated today, was precisely yestoday perishes tomorrow which the person of th ...
- 随机数的组合问题(JavaScript描述)
随机数的组合问题在面试时是经常考的,比如之前我就被问到:“有一个可以生成1-5的随机数函数,怎样把它扩大到1-7?” 在解决这个问题之前,先来看看另外一个比较简单的问题:“有一个可以生成1-7的函数, ...
- 使用php生成数字、字母组合验证码
项目中经常会遇到一些登陆验证,支付验证等等一系列安全验证的策略.实现方法多种多样,下面就来讲解下如何用php生成简单的文字+数字组合的验证码: 所用语言php,gd库 原理解释: a>实质上是在 ...
- 关于TM影像各波段组合的简介
321:真彩色合成,即3.2.1波段分别赋予红.绿.蓝色,则获得自然彩色合成图像,图像的色彩与原地区或景物的实际色彩一致,适合于非遥感应用专业人员使用. 432:标准假彩色合成,即4.3.2波段分别赋 ...
随机推荐
- java swing模仿随机频谱
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Grap ...
- android开发------Activity生命周期
这几天工作比较忙,基本没有什么时间更新播客了. 趁着今晚有点时间,我们来简单说一下什么是Activity生命周期和它们各阶段的特征 什么是生命周期 在还没有接触android开发的时候,听到有人说Ac ...
- 关于insert /*+ append*/ 各种insert插入速度比较
来源于:http://www.cnblogs.com/rootq/archive/2009/02/11/1388043.html SQL> select count(*) from t;COUN ...
- centos 7 下进入单用户模式修改root密码
centos7进入单用户模式修改root用户密码 在工作中可能会遇到root密码忘记,那么这里就要进入单用户模式下了. 在重启电脑之后 时间:2015-05-13 10:42来源:blog.51cto ...
- PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
通过curl_setopt()函数可以方便快捷的抓取网页(采集很方便),curl_setopt 是php的一个扩展库 使用条件:需要在php.ini 中配置开启.(PHP 4 >= 4.0.2) ...
- [转]Mybatis3.x与Spring4.x整合
原文地址:http://www.cnblogs.com/xdp-gacl/p/4271627.html 一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: mvn archetyp ...
- mysql 注释
mysql> SELECT 1+1; # This comment continues to the end of line mysql> SELECT 1+1; -- This comm ...
- 【SPOJ 7258】Lexicographical Substring Search
http://www.spoj.com/problems/SUBLEX/ 好难啊. 建出后缀自动机,然后在后缀自动机的每个状态上记录通过这个状态能走到的不同子串的数量.该状态能走到的所有状态的f值的和 ...
- javascript 数组实例
在遍历数组时, 如果想要排除 null / undefined 和 不存在的元素时,代码如下: for ( var i = 0; i < a.length; i++ ){ //跳过null / ...
- 【BZOJ-3343】教主的魔法 分块
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 950 Solved: 414[Submit][Status][Discuss ...