生成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波段分别赋 ...
随机推荐
- C# Gabbage Collecting System
* 这个程序非常巧妙的探测了一下垃圾回收机制,发现如下结论: * 当内存紧急时,才会启动垃圾回收GC.Collect() * 从此程序的运行上来看,delete是连续出现的,这体现了垃圾回收的强度. ...
- 东大OJ-1588: Routing Table
题目描述 In the computer network, a Router is a device which finds an optimal way to transmit the datagr ...
- ipython又一方便的调试和应用工具!!!
控制台下://ipython 命令丰富 比如:ls 显示目录 ipython --pylab %run -p *.py quit关闭 示例: In []: %run -p test.py H ...
- 请问-bash-4.1$ 出现故障的原理及解决办法?
请问如下登录环境故障的原理及解决办法? [root@ ~]# su - luoahong -bash-4.1$ -bash-4.1$ 解答: [luoahong@ ~]$ rm -rf /home/l ...
- jQuery总结(2016-7-4)
1.事件对应有事件的方法, 如click事件, 有click()方法. 2.jQuery动画 3.AJAX是与服务器交换数据的技术! load()方法 get()方法 post()方法
- [转]jsp与servlet的区别联系
原文地址:http://bbs.itheima.com/thread-28972-1-1.html Servlet是Java提供的用于开发Web服务器应用程序的一个组件,运行在服务器端,由Servle ...
- mysql-拼接字段concat,concat_ws函数
Mysql的查询结果行字段拼接,可以用下面两个函数实现: 1. concat函数 mysql') from test ; +---------------------+ ') | +--------- ...
- Jquery-pagination.js分页处理
首先提供pagination.js的插件源码 /** * This jQuery plugin displays pagination links inside the selected elemen ...
- js 中 == 和=== 有什么区别?
第一个是相等符:第二个全等符: 其中第一个在比较的时候,会进行类型转换,而第二个则不会, alert('55' == 55);//truealert('55' === 55);//false
- 1.值得推荐的C/C++框架和库 (转)
值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的 ...