java中序遍历代码 中序遍历怎么数

Java 先、中、后序遍历方法的实现

前pre(root)

创新互联是一家集网站建设,平南企业网站建设,平南品牌网站建设,网站定制,平南网站建设报价,网络营销,网络优化,平南网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

{ if(root==null)return null;

visit(root);pre(root.left);pre(root.right);

}

中in(root)

{ if(root==null)return null;

in(root.left);visit(root);in(root.right);

}

后post(root)

{ if(root==null)return null;

post(root.left);post(root.right);visit(root);

}

Java几种简单的排序源代码

给你介绍4种排序方法及源码,供参考

1.冒泡排序

主要思路: 从前往后依次交换两个相邻的元素,大的交换到后面,这样每次大的数据就到后面,每一次遍历,最大的数据到达最后面,时间复杂度是O(n^2)。

public static void bubbleSort(int[] arr){

for(int i =0; i  arr.length - 1; i++){

for(int j=0; j  arr.length-1; j++){

if(arr[j]  arr[j+1]){

arr[j] = arr[j]^arr[j+1];

arr[j+1] = arr[j]^arr[j+1];

arr[j] = arr[j]^arr[j+1];

}

}

}

}

2.选择排序

主要思路:每次遍历序列,从中选取最小的元素放到最前面,n次选择后,前面就都是最小元素的排列了,时间复杂度是O(n^2)。

public static void selectSort(int[] arr){

for(int i = 0; i arr.length -1; i++){

for(int j = i+1; j  arr.length; j++){

if(arr[j]  arr[i]){

arr[j] = arr[j]^arr[i];

arr[i] = arr[j]^arr[i];

arr[j] = arr[j]^arr[i];

}

}

}

}

3.插入排序

主要思路:使用了两层嵌套循环,逐个处理待排序的记录。每个记录与前面已经排好序的记录序列进行比较,并将其插入到合适的位置,时间复杂度是O(n^2)。

public static void insertionSort(int[] arr){

int j;

for(int p = 1; p  arr.length; p++){

int temp = arr[p];   //保存要插入的数据

//将无序中的数和前面有序的数据相比,将比它大的数,向后移动

for(j=p; j0  temp arr[j-1]; j--){

arr[j] = arr[j-1];

}

//正确的位置设置成保存的数据

arr[j] = temp;

}

}

4.希尔排序

主要思路:用步长分组,每个分组进行插入排序,再慢慢减小步长,当步长为1的时候完成一次插入排序,  希尔排序的时间复杂度是:O(nlogn)~O(n2),平均时间复杂度大致是O(n^1.5)

public static void shellSort(int[] arr){

int j ;

for(int gap = arr.length/2; gap  0 ; gap/=2){

for(int i = gap; i  arr.length; i++){

int temp = arr[i];

for(j = i; j=gap  temparr[j-gap]; j-=gap){

arr[j] = arr[j-gap];

}

arr[j] = temp;

}

}

}

java Map 怎么遍历

java Map 遍历一般有四种方式

方式一: 这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。

方式二: 在for-each循环中遍历keys或values。

如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。

该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。

方式三:使用Iterator遍历

使用泛型:

不使用泛型:

你也可以在keySet和values上应用同样的方法。

方法四:  通过键找值遍历(效率低)

作为方法一的替代,这个代码看上去更加干净;但实际上它相当慢且无效率。

因为从键取值是耗时的操作(与方法一相比,在不同的Map实现中该方法慢了20%~200%)。如果安装了FindBugs,它会做出检查并警告你关于哪些是低效率的遍历。所以尽量避免使用。

总结:

如果仅需要键(keys)或值(values)使用方法二。

如果所使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。

否则使用方法一(键值都要)。

扩展资料:

类似的遍历算法:

二叉树的遍历算法

1、先(根)序遍历的递归算法定义:

若二叉树非空,则依次执行如下操作:

⑴ 访问根结点;

⑵ 遍历左子树;

⑶ 遍历右子树。

2、中(根)序遍历的递归算法定义:

若二叉树非空,则依次执行如下操作:

⑴遍历左子树;

⑵访问根结点;

⑶遍历右子树。

3、后(根)序遍历得递归算法定义:

若二叉树非空,则依次执行如下操作:

⑴遍历左子树;

⑵遍历右子树;

⑶访问根结点。

参考资料:百度百科——Java

java中输入100个数据再排序后输出的代码

既然在学数据结构,那就用二叉树排序吧,一个根节点,比根节点小的排左边,比根节点大的排右边,以此类推,形成二叉树,再遍历输出即可。这个例子掌握了,你就多学了一种数据结构

class BinaryTree

{

class Node

{

private int data; //保存数据内容

private Node left; //左子树

private Node right;//右子树

public Node(int data){

this.data = data;

}

public void addNode(Node newNode){ //addNode方法用来添加数据

if(newNode.data = this.data){

if(this.left == null){ //左子树为空

this.left = newNode;

}else{

this.left.addNode(newNode);//继续向下判断

}

}

if(newNode.data this.data){

if(this.right == null){ //右子树为空

this.right = newNode;

}else{

this.right.addNode(newNode);//继续向下判断

}

}

} //addNode方法结束

public void printNode(){ //采用中序遍历(左-根-右)

if(this.left != null){

this.left.printNode();

}

System.out.println(this.data); //找到根内容

if(this.right != null){

this.right.printNode();

}

}

} //Node类结束

private Node root; //根节点

public void add(int data){

Node newNode = new Node(data);

if(this.root == null){

this.root = newNode;

}else{

this.root.addNode(newNode);

}

}

public void print(){

this.root.printNode();

}

}

public class Demo

{

public static void main(String args[]){

BinaryTree bt = new BinaryTree();

bt.add(3);

bt.add(4);

bt.add(0);

bt.add(1);//可添加100个数据,也可通过args[]手动输入,需略做调整

bt.print();

}

}


标题名称:java中序遍历代码 中序遍历怎么数
本文路径:http://pwwzsj.com/article/docjhco.html