前pre(root)
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設,平南企業(yè)網(wǎng)站建設,平南品牌網(wǎng)站建設,網(wǎng)站定制,平南網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,平南網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
{ 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);
}
給你介紹4種排序方法及源碼,供參考
1.冒泡排序
主要思路: 從前往后依次交換兩個相鄰的元素,大的交換到后面,這樣每次大的數(shù)據(jù)就到后面,每一次遍歷,最大的數(shù)據(jù)到達最后面,時間復雜度是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.插入排序
主要思路:使用了兩層嵌套循環(huán),逐個處理待排序的記錄。每個記錄與前面已經(jīng)排好序的記錄序列進行比較,并將其插入到合適的位置,時間復雜度是O(n^2)。
public?static?void?insertionSort(int[]?arr){
int?j;
for(int?p?=?1;?p??arr.length;?p++){
int?temp?=?arr[p];???//保存要插入的數(shù)據(jù)
//將無序中的數(shù)和前面有序的數(shù)據(jù)相比,將比它大的數(shù),向后移動
for(j=p;?j0??temp?arr[j-1];?j--){
arr[j]?=?arr[j-1];
}
//正確的位置設置成保存的數(shù)據(jù)
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 遍歷一般有四種方式
方式一: 這是最常見的并且在大多數(shù)情況下也是最可取的遍歷方式。在鍵值都需要時使用。
方式二: 在for-each循環(huán)中遍歷keys或values。
如果只需要map中的鍵或者值,你可以通過keySet或values來實現(xiàn)遍歷,而不是用entrySet。
該方法比entrySet遍歷在性能上稍好(快了10%),而且代碼更加干凈。
方式三:使用Iterator遍歷
使用泛型:
不使用泛型:
你也可以在keySet和values上應用同樣的方法。
方法四:? 通過鍵找值遍歷(效率低)
作為方法一的替代,這個代碼看上去更加干凈;但實際上它相當慢且無效率。
因為從鍵取值是耗時的操作(與方法一相比,在不同的Map實現(xiàn)中該方法慢了20%~200%)。如果安裝了FindBugs,它會做出檢查并警告你關于哪些是低效率的遍歷。所以盡量避免使用。
總結(jié):
如果僅需要鍵(keys)或值(values)使用方法二。
如果所使用的語言版本低于java 5,或是打算在遍歷時刪除entries,必須使用方法三。
否則使用方法一(鍵值都要)。
擴展資料:
類似的遍歷算法:
二叉樹的遍歷算法
1、先(根)序遍歷的遞歸算法定義:
若二叉樹非空,則依次執(zhí)行如下操作:
⑴ 訪問根結(jié)點;
⑵ 遍歷左子樹;
⑶ 遍歷右子樹。
2、中(根)序遍歷的遞歸算法定義:
若二叉樹非空,則依次執(zhí)行如下操作:
⑴遍歷左子樹;
⑵訪問根結(jié)點;
⑶遍歷右子樹。
3、后(根)序遍歷得遞歸算法定義:
若二叉樹非空,則依次執(zhí)行如下操作:
⑴遍歷左子樹;
⑵遍歷右子樹;
⑶訪問根結(jié)點。
參考資料:百度百科——Java
既然在學數(shù)據(jù)結(jié)構,那就用二叉樹排序吧,一個根節(jié)點,比根節(jié)點小的排左邊,比根節(jié)點大的排右邊,以此類推,形成二叉樹,再遍歷輸出即可。這個例子掌握了,你就多學了一種數(shù)據(jù)結(jié)構
class BinaryTree
{
class Node
{
private int data; //保存數(shù)據(jù)內(nèi)容
private Node left; //左子樹
private Node right;//右子樹
public Node(int data){
this.data = data;
}
public void addNode(Node newNode){ //addNode方法用來添加數(shù)據(jù)
if(newNode.data = this.data){
if(this.left == null){ //左子樹為空
this.left = newNode;
}else{
this.left.addNode(newNode);//繼續(xù)向下判斷
}
}
if(newNode.data this.data){
if(this.right == null){ //右子樹為空
this.right = newNode;
}else{
this.right.addNode(newNode);//繼續(xù)向下判斷
}
}
} //addNode方法結(jié)束
public void printNode(){ //采用中序遍歷(左-根-右)
if(this.left != null){
this.left.printNode();
}
System.out.println(this.data); //找到根內(nèi)容
if(this.right != null){
this.right.printNode();
}
}
} //Node類結(jié)束
private Node root; //根節(jié)點
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個數(shù)據(jù),也可通過args[]手動輸入,需略做調(diào)整
bt.print();
}
}
文章標題:java中序遍歷代碼 中序遍歷怎么數(shù)
分享地址:http://aaarwkj.com/article20/docjhco.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、、網(wǎng)站制作、做網(wǎng)站、手機網(wǎng)站建設、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)