(1)陣列儲存方式分析:
優點:通過下標的方式訪問元素,速度快,對於有序陣列,還可以使用二分查詢來提高檢索速度
缺點:如果要檢索某個具體值或者插入值,會整體移動,效率低
(2)鍊錶儲存方式分析
優點:在一定程度上對陣列儲存方式有優化,如插入乙個數值節點,只需要將插入節點,鏈結到鍊錶中即可,刪除效率也很好
缺點:在進行檢索時,效率任然較低.
(3)樹儲存方式分析
能提高資料儲存,讀取的效率,比如利用二叉排序樹(binary sort tree),即可以保證資料的檢索速度,同時也可以保證資料的插入刪除,修改的速度
樹的術語
1)樹有很多種,每個節點最多只能有兩個子節點的一種形式稱為二叉樹
2)二叉樹的子節點分為左節點和右節點
3)如果該二叉樹的所有葉子節點都在最後一層,並且總節點數2^n-1,n是層數,我們稱為滿二叉樹
4)如果還二叉樹的所有葉子節點都在最後一層或者倒數第二層,而且最後一層的葉子節點在左邊連續,倒數第二層的葉子節點在右邊連續,我們稱為完全二叉樹
二叉樹的遍歷:
(1)前序遍歷:先輸出父節點,再遍歷左子樹和右子樹
(2)中序遍歷:先遍歷左子樹,在輸出父節點,再遍歷右子樹
(3)後序遍歷:先遍歷左子樹,在遍歷右子樹,最後輸出父節點
總結:看輸出父節點的順序,就確定是前序,中序,後序
分析二叉樹的遍歷步驟
二叉樹的查詢
思考分析:前序,中序和後序遍歷分別比較了多少次?
二叉樹刪除
暫時我們先定義一下刪除的規則:如果我們刪除的是葉子節點的話,刪除該節點,如果我們刪除的是非葉子節點,那麼刪除該子樹
上面步驟與我接下來**步驟有區別,**先判斷的是6,接下來按照步驟判斷
package com.self.datastructure.binarytree;
public class binarytreedemo
}class binarytree
//前序遍歷
public void preordertree()else
}//中序遍歷
public void infixordertree()else
}//後序遍歷
public void postordertree()else
}//前序遍歷查詢
public heronode preordersearchtree(int no)else
}//中序遍歷查詢
public heronode infixordersearchtree(int no)else
}//後序遍歷查詢
public heronode postordersearchtree(int no)else
}//刪除節點
public void deletebynotree(int no)else
}else
}}class heronode
public int getno()
public void setno(int no)
public string getname()
public void setname(string name)
public heronode getleft()
public void setleft(heronode left)
public heronode getright()
public void setright(heronode right)
@override
public string tostring() ';
}//前序遍歷的方法
public void preorder()
if(this.right != null)
}//中序遍歷
public void infixorder()
system.out.println(this);
if(this.right != null)
}//後序遍歷
public void postorder()
if(this.right != null)
system.out.println(this);
}//前序遍歷查詢
public heronode preordersearch(int no)
heronode resultheronode = null;
if(this.left != null)
if(resultheronode != null)
if(this.right != null)
return resultheronode;
}//中序遍歷查詢
public heronode infixordersearch(int no)
if(result != null)
system.out.println("22222222222222222");
if(this.no == no)
if(this.right != null)
return result;
}//後序遍歷查詢
public heronode postordersearch(int no)
if(result != null)
if(this.right != null)
if(result != null)
system.out.println("33333333333333333");
if(this.no == no)
return result;
}//刪除節點
public void deletebyno(int no)
if(this.right != null && this.right.no == no)
if(this.left != null)
if(this.right != null)}}
這裡有個思考:
大家可以一起思考一下,有時間博主會把這塊**實現一下.
資料結構之二叉樹
在二叉樹中每個節點最多只能有兩個子節點。即左子節點和有子節點。在二叉樹中最重要的操作應當是遍歷。即按照某一順序訪問二叉樹中的每乙個節點。一般有如下幾種遍歷方法 1 前序遍歷,即先訪問根幾點,然後再訪問左子節點,最後訪問右子節點。2 中序遍歷,即先訪問左子節點,然後再訪問根節點,最後訪問右子節點。3 ...
資料結構之二叉樹
定義 滿足以下條件的就是樹 1.有且僅有乙個特定的稱為根root的結點。2.當n 1時,其餘結點可分為m m 0 個互不相交的有限集,其中每個集合本身又是乙個棵樹,並稱為根的子樹。樹是資料結構中一種常見的資料結構,比如我們排序中常見的二叉樹,紅黑樹等。最常見的是樹形表示法和廣義表表示法。樹的結構示意...
資料結構之二叉樹
來看一下樹的結構 class treenode public treenode string value 首先,為了方便後面看到效果,先手動初始化乙個有4個節點的二叉樹 tree tree new tree treenode root new treenode root treenode node1...