一。按照国际惯例,先扯点别的。
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的一个处理。
八。总结:在这里只是对‘二叉树’进行了实现,应该说树的相关内容扩展性很强,而且现实的应用场景也很常见,所以说对于树,只是一个初探,以后还必须深入