二叉樹時間複雜度分析及增刪改查操作java實現

2021-08-28 03:21:28 字數 2756 閱讀 1373

順序表和煉表的時間複雜度由給定條件不同從而會得出不同的時間複雜度結果,對於程式設計時並不總是最好用的儲存方式。二叉樹是一種更加穩定的資料儲存方式,其複雜度總是能表示為乙個固定的形式。以下來分析二叉樹增刪改查操作做的時間複雜度。

設有如下資料需要進行二叉樹形式儲存:

首先對二叉樹進行基本分析:

1.二叉樹每層最大容納量為2^(n-1)個;

2.前n行共可儲存1+2+4+8+···+2^(n-1)=2^n   -1個資料;

3.二叉樹節點分布規律是:左節點《父節點《右節點;

4.由第一層延某條路徑查詢到最後一層的某個資料共需要查詢log2(2^n)=n次;

5.當刪除某個節點時,需要將左子樹最右節點或右子樹最左節點移動至被刪除節點處,且被移動節點的左或右節點移至被移動節點的位置。

由上述規律歸納二叉樹的時間複雜度如下(以下設總結點數為n):

增:迴圈遍歷每個節點,比較各節點的值,直到找到相應位置,時間複雜度為log2n,2為底數。

查:迴圈遍歷每個節點,比較各節點的值,直到找到相應位置,時間複雜度為log2n。

改:迴圈遍歷每個節點,比較各節點的值,直到找到相應位置,將此節點資料值改為相應值,時間複雜度為log2n。

刪:迴圈遍歷每個節點,比較各節點的值,直到找到相應位置,將左子樹最右節點或右子樹最左節點移動至被刪除節點處,且被移動節點的左或右節點移至被移動節點的位置,時間複雜度為log2n。

增刪改查的**分別如下:

1.定義二叉樹:

public class studentnode 

studentnode(int num,string name)

@override

public string tostring()

}

2.增:構建包含100個不等隨機數的陣列,並將資料插入二叉樹:

public static int randomcommon(int min, int max, int n)  

int result = new int[n];

int count = 0;

while(count < n)

} if(flag)

} return result;

} public static void insert(int num,string name,studentnode node)

else

} else

else}}

3.查:

public static studentnode find(studentnode root,int num) 

else if(num>point.num)

else

point=point.right;

}else

else

point=point.left; }}

return null;

}

4.改:

public static string change(studentnode root,int num,string name) 

else if(num>point.num)

else

point=point.right;

}else

else

point=point.left; }}

return null;

}

5.刪:

public static string delete(studentnode root,int num) 

target_num=point.num;

target_name=point.name;

if(point.left!=null)

find.num=target_num;

find.name=target_name;

return find_name+"已刪除"+"現在由"+find.name+"取代";

} else if(find.right!=null)

target_num=point.num;

target_name=point.name;

if(point.right!=null)

find.num=target_num;

find.name=target_name;

return find_name+"已刪除"+"現在由"+find.name+"取代";

} else

else if(find.num6.main函式:

public static void main(string args) {

// todo auto-generated method stub

//增加

int arr = randomcommon(1,101,100);

studentnode root = new studentnode(1,"我是第"+1);

root.pre=null;

for(int i=1;i

二叉樹是一種儲存資料比較穩定的方法,其增刪改查的時間複雜度均為log2n,但其原理實現較線性表更難理解,需要花更多精力去消化吸收。關鍵在於理解二叉樹的構造形式,牢記二叉樹的特點。

java二叉樹增刪改查詳解

二叉樹的刪除和修改 建議讀者先看二叉樹的建立,遍歷,插入和查詢 然後找到要插入的結點。找法有三種情況 注意事項 原來刪除結點的左右孩子結點和父結點不用管,只要把該插入結點的值給刪除結點就行了,同時你還要把上去的結點的孩子結點處理一下。以便不影響後續操作。雖然說得有些繞,不過其實也沒什麼東西。就是把插...

二叉樹增刪改查 程式實現

二叉排序樹定義 一棵空樹,或者是具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 2 若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 3 左 右子樹也分別為二叉排序樹 4 沒有鍵值相等的結點。二叉樹刪除節點 二叉排序樹刪除節點的時候為其刪除後還是乙個二叉排...

二叉搜尋樹的增刪改查

二叉搜尋樹 binary search tree 簡稱 bst,是一種特殊形式的二叉樹。二叉搜尋樹的的結構有兩種可能 對於二叉搜尋樹,需要掌握基本的操作 當要查詢目標值的節點時,我們可以根據二叉樹的結點資料值的有序性 左孩子 根結點 右孩子 根據以下思路進行查詢 簡單實現 返回以目標值結點為根結點的...