大家好,今天小编关注到一个比较有意思的话题,就是关于打印二叉树java语言的问题,于是小编就整理了3个相关介绍打印二叉树Java语言的解答,让我们一起看看吧。
想用Java学习与算法,我应该掌握Java到哪种程度?
首先强调一点,数据结构和算法其实和语言没有太大关系,编程语言只是我们实现算法的工具。这里我为你整理了一份常见的你可以尝试去实现的算法清单:
链表类题目:
2. 链表反转
4. 查到倒数第K个链表节点
5. 求链表的中间节点
6. 划分链表使得所有小于x的节点排在大于等于x的节点之前
7. 合并有序链表
求二叉树宽度的算法?
二叉树的宽度是指二叉树各层结点个数的最大值。求二叉树的宽度可以依据与二叉树的层次遍历,我们知道,二叉树的层次遍历借助于deque实现,每次打印当前结点后将其左子树右子树入队,此时队列中既包含当前层的结点,也包含下一层的结点,若我们将当前层的结点全部出队,剩余的就是下一层的结点个数。
所以,我们可以使用maxWidth来表示最大宽度,若下一层的结点个数大于maxWidth,则更新maxWidth,最终队列为空,得到的maxWidth即为二叉树的宽度。
给你一个含有1亿个QQ号码的文件,如何快速的查找某个QQ号码?
1亿qq号,按照每个文qq号11位算,大概占用1.02g空间,因为数据量不大,可以全加载进内存。这样的话可以有好多方法。
第一种是内存映射文件,Windows内存映射文件可以映射磁盘上的大文件,别说1g,就算10g也没问题,然后操作就跟在内存操作一样,我之前试过500m的纯文本(打印的π),用c语言函数strstr查找字符串就能秒得结果,1g跟500m区别不大。
第二种方法,同样是建立在数据量不大的基础上,可以构造map存在内存中qq号就是key,因为map基于hash预算,查询效率非常高,也是秒得结果。
第三种存数据库,因为数据达到亿级,还是考虑oracle这种单表性能爆表的比较好,放mysql估计比较悬。
第四种可以用内存数据库,如redis,其中key存为qq号,人家专业干这个的,也是秒得结果。
第五种es,其实es干这个有点大材小用。
方法1,
微秒级查询方法,假设现在QQ号共10位数,声明一个Bitmap,大小99亿,每个bit只存0或1,读取文件,QQ号作为下标设置,如果对应位置的标记为0设置为1。某号码X,只需要判断下标位置X的标记是否为1即可
方法2,
节省内存的方法,创建一个文件共99亿行,每行一个换行符,读取QQ文件号码,用java中随机文件访问类,直接定位到对应行,写入QQ号,依次写完,待查X号码,类似定位方法,判定位置处内容是否是换行符
方法3,文件中每个QQ号命名一个文件,利用系统查找工具查找,或利用和编程语言中文件工具类判断是否存在
方法4,娱乐篇
搞一个网站,首页创建1亿个超链接,每个链接放一个QQ号,每个号链接到站内对应QQ号命名的网页,然后将网页登记到百度收录,一个星期后,在搜索框用site命令,指定上述网站地址,并输入要搜索的内容,也是毫秒级返回
如果你学过信息理论,那么根据信息熵值理论,对于无序的信息,任何查找算法都不可能比顺序查找快.
所谓顺序查找算法,就是挨个逐条比较,直到找到为止.
所以如果你只是查找一次,那么就只有一个方法,挨个逐条比较。其他的所有方法都是扯淡. 这个早就有数学家作了详细的分析研究,那些连基本算法常识都没的人,就别扯淡了. 无序信息,除了顺序查找,没有更快的算法,想提高速度,只能想法提高算力(更块的CPU,分布式计算等等)
但是,如果你想制作一个查找的系统,最好的办法就是对原始数据进行预处理,使原始数据形成结构化的有序数据。当数据有序化后,查找的效率就能大大的提高了,这个过程叫做索引.
一个最简单的方法就是先把QQ号数据做一次排序,形成一个新按照大小顺序排列的新文本.
针对于大小顺序排列的数据,有二分法和插入法两种可以提高速度得查找算法. 详细实现请去网上查找.
其次,更有效的方法是把无序的原始数据,通过算法形成结构化的树,然后再通过各种树的遍历莱进行查找.
常用的有二叉树查找,平衡树查找,红黑树查找等等.
其中红黑树是综合新能最好,应用最广泛的查找算法. 大家常见的数据库中的查找算法,系统文件查找,一般都是红黑树算法.
上大学的时候,计算机专业有一门课叫算法与数据结构. 随意请大家一定记住,算法和数据结构是密不可分的.
到此,以上就是小编对于打印二叉树java语言的问题就介绍到这了,希望介绍关于打印二叉树java语言的3点解答对大家有用。