2013遍历算法.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
遍历算法(遍历二叉树6种方法)概述遍历算法针对二叉树而言的,主要有先序、中序、后序三种遍历顺序,三种顺序又分别有递归和常规算法,二叉树遍历的主要思想是:遍历左子树,遍历右子树,访问根节点,由这三者的遍历顺序来确定是先序、中序还是后序。下面只要求掌握递归遍历算法,常规遍历算法见附录一。先序遍历算法遍历顺序:访问根节点,遍历左子树,遍历右子树。代码如下:void preOrder(BinaryTreeNode bt) {if (bt == null)// 如果当前树为空,则终止递归return;System.out.print(bt.getData());// 先访问根节点preOrder(bt.getLeftChild());// 再遍历左子树preOrder(bt.getRightChild());// 再遍历右子树}中序遍历算法遍历顺序:遍历左子树,访问根节点,遍历右子树。代码如下:void midOrder(BinaryTreeNode bt) {if (bt == null)// 如果当前树为空,则终止递归return;preOrder(bt.getLeftChild());// 先遍历左子树System.out.print(bt.getData());// 再访问根节点preOrder(bt.getRightChild());// 再遍历右子树}后序遍历算法遍历顺序:遍历左子树,遍历右子树,访问根节点。代码如下:void postOrder(BinaryTreeNode bt) {if (bt == null)// 如果当前树为空,则终止递归return;preOrder(bt.getLeftChild());// 先遍历左子树preOrder(bt.getRightChild());// 再遍历右子树System.out.print(bt.getData());// 再访问根节点}层次遍历算法void levelOrder(BinaryTreeNode bt) {if (bt == null)return;Queue q = new ArrayQueue();q.enqueue(bt);while (!q.isEmpty()) {bt = (BinaryTreeNode) q.dequeue();// 取出队首元素,访问之System.out.println(bt.getData());if (bt.hasLeftChild()) {q.enqueue(bt.getLeftChild());// 如果左节点存在,放入队列中}if (bt.hasRightChild()) {q.enqueue(bt.getRightChild());// 如果右节点存在,放入队列中}}}排序算法(9种排序算法)概述将一个数据元素的任意序列,重新排列成一个按关键字有序的序列。插入类排序基本思想是:逐个考察每个待排序元素,将每一个新元素插入到前面已经排好序的序列中适当的位置上,使得新序列仍然是一个有序序列。主要介绍三种:直接插入排序、折半插入排序和希尔排序。直接插入排序思路:仅有一个元素的序列总是有序的,因此,对 n 个记录的序列,可从第二个元素开始直到第 n 个元素,逐个向有序序列中执行插入操作,从而得到 n 个元素按关键字有序的序列。代码如下:void insert(int[] a) {for (int i = 1; i a.length; i++) {// 从第二个开始比较插入// 待插入的元素比之前排好序的元素最大值小才需要插入if (a[i] a[i - 1]) {int tmp = a[i];// 把当前位置腾出来a[i] = a[i - 1];// 和已排好序的最大值交换顺序int j = i - 2;// 遍历之前i-2个元素找出要插入的位置// 如果待插入元素小于已排好序中的第j位并j不小于0则继续遍历for (; j = 0 tmp a[j]; j--)a[j + 1] = a[j];a[j + 1] = tmp;// j + 1即为待插入位置}}}折半插入排序思路:可以不断二分有序序列来确定插入位置,即搜索插入位置的方法可以使用折半查找实现。代码如下:void binaryInsert(int[] a) {for (int i = 1; i a.length; i++) {// 从第二个开始比较插入// 待插入的元素比之前排好序的元素最大值小才需要插入if (a[i] a[i - 1]) {int tmp = a[i];// 把当前位置腾出来a[i] = a[i - 1];// 和已排好序的最大值交换顺序int low = 0, high = i - 1, mid;//high=已排好序列的长度while

文档评论(0)

fRsPNcJbMR + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档