一。按照国际惯例,先扯点别的。
11020期:开奖号码57873, 中奖 41 注
11021期:开奖号码57873, 中奖 228 注
体育彩票1月20日晚开的是57873总共中了41注,而21日晚开的还是57873,更神奇的是竟然总共中了228注,正常人想一下连续两次摇到同样的号码概略为几何。更可笑的是竟然中奖人数反而更多。莫非是真的如大家所说,放错了视频?又或者如前几年某位程序员报的彩票内幕?不过其实这也很正常,因为这都是发生在神奇的,万能的中国。生在中国,可以见证很多奇迹,比如房价,比如股市,说到股市,向大家推荐一本袁剑的《中国证券市场批判》,讲述的是政治经济学,很不错。
二。随着这几年‘双核’,甚至‘多核’的普及,‘多核编程’已经渐渐成为程序员一个必备的技能,对于‘多核编程’,考虑更多的是架构的设计与任务的分配即负载均衡,以前的‘并发’注重的是多线程的软件环境,而现今的‘并行’则让硬件也成为了应用程序员所必须关注的一个点,应该说‘软硬兼顾’如‘文武双全’渐渐成为了一个程序员最基本的素质。就如有时候一个架构遇到了效率瓶颈,按照以往,习惯从代码优化或者设计缓存出发考虑问题,而很多时候是硬件上跟不上配套。著名的Erlang语言则擅长于‘多核’环境,它具有操作系统的一些特性:如并发线程,作业调度和内存管理等。毫无疑问,‘多核编程’是一项必将到来的革命。
三。回到数据结构。昨天在写代码之时,还只上大一的表弟竟然跟我说起了‘二叉树’,而且说的有板有眼,更让震惊的是他学的是‘旅游管理’,和‘二叉树’八竿子打不到一起,不仅感叹岁月唏嘘,自己大学四年多少日子挥洒在了球场,多少精力挥洒在了无味的挣扎之中,拿一句比较灰的话来说,就是‘一切都他妈的是浮云’。今天说到树,说到树,我想到‘村上春树’,‘公车上树’,‘周树人’,‘山楂树’,可我就是想不起来‘二叉树’。
四。树的一些基本概念。
(1)根结点
(2)叶子结点
(3)孩子结点,兄弟结点,双亲结点。。。
(4)二叉树:一个根结点加上左子树和右子树。
(5)遍历分为三种:先序,中序和后序
五。直接贴代码:
package com.ds.test4;
public class BiTree {
Node root; //根节点
public BiTree(){ // 构造二叉树
root =null;
}
public void insert(int e){ //插入元素
root = insert(root,e); //现行插入root,以构造根节点
}
private Node insert(Node node, int e) {
if(node == null){
node = new Node(e); //构造根结点或者构造叶子结点
}else{
if(e<=node.data){
node.left = insert(node.left,e); //递归以产生左结点
}else{
node.right = insert(node.right,e);//递归以产生右结点
}
}
return node;
}
public void initTree(int[] array){ //用int数组初始化二叉树
for(int i=0;i<array.length;i++){
insert(array[i]); //循环
}
}
public void preOrder(){ //先序
preOrder(root);
System.out.println();
}
public void preOrder(Node node){
if(node == null) return;
System.out.print(node.data + " ");
preOrder(node.left);
preOrder(node.right);
}
public void inOrder(){ //中序
inOrder(root);
System.out.println();
}
public void inOrder(Node node){
if(node == null) return;
inOrder(node.left);
System.out.print(node.data + " ");
inOrder(node.right);
}
public void postOrder(){ //后序
postOrder(root);
System.out.println();
}
public void postOrder(Node node){
if(node == null) return;
postOrder(node.left);
postOrder(node.right);
System.out.print(node.data + " ");
}
class Node{
Node left; // 左结点
Node right; // 右结点
private int data; //数据域
public Node(){}
public Node(int e){ //构造结点
this.left = null;
this.right = null;
this.data = e;
}
}
}
int[] array ={2,7,8,4,6,7,1,5,4};
BiTree bt = new BiTree();
bt.initTree(array);
System.out.println("preorder:");
bt.preOrder();
System.out.println("inorder:");
bt.inOrder();
System.out.println("postorder:");
bt.postOrder();
七。对于树,也有许多应用场景,如软件压缩使用的哈弗曼算法,对于软件压缩,其原理无非是是把出现频率较高的字符(字节)提取出来使用一个更短字节数的符号进行代替,而为了解压缩,则必须保留这些代替的对应关系。在数组中,具有稀疏矩阵压缩这个概念,其实也就是对于0的一个处理。
八。总结:在这里只是对‘二叉树’进行了实现,应该说树的相关内容扩展性很强,而且现实的应用场景也很常见,所以说对于树,只是一个初探,以后还必须深入