二叉樹排序樹的增刪查改超詳細講解

2021-08-28 20:03:23 字數 2440 閱讀 3292

首先我們先了解下什麼是二叉樹:

在電腦科學中,二叉樹是每個結點最多有兩個子樹的樹結構。通常子樹被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用於實現二叉查詢樹和二叉堆。

簡單來說就是乙個節點有最多有兩個孩子左孩子右孩子,最少可以沒有孩子,叫做葉子節點,這樣組成的數就叫做二叉樹

像這樣的樹: 

1、插入

當插入一列數的時候如  5,8,22,10,1,3,83,46,0,89,-9,54,13我們按照節點比左孩子大,比右孩子小排列樹。

首先把5當作根節點,比較8比5大,放在8的有右節點上,8就是5的右孩子,22比5大,應該放在5的右節點,但是5的右孩子是8,所以22應該和8比較,22比8大放在8的右節點上,所22是8的右孩子,比較後得到的二叉樹為:

同理,左後得到的二叉樹為:

2、刪除

如上圖,如果想刪除節點22,則刪除後需要補充8的右節點,需要用22的左右節點補充,補充完後10,83還要是他的左右節點。

所以這個數一定比10大,比83小。即這個數為 22( 要刪除的節點) 的左節點的右子樹的最大值或者  22( 要刪除的節點)右節點的左子樹的最小值。即刪除後二叉樹為:

以下是 實現**:

package linklearn;

public class treenode

@override

public string tostring()

main函式:

package linklearn;

public class treebuild ;

treenode root = new treenode(a[0]);//陣列第乙個數設定為根節點

root.leftnode=null;

root.rightnode = null;

for(int i=1 ,length = a.length;i < length;i++)

system.out.println(root);

delete(root,83);

system.out.println(root);

search(root,8);

system.out.println(root); }

public static void insert(integer data, treenode node) else

}else else

} }

public static void delete(treenode root,integer a)

if(aa)else

}if(root.leftnode !=null&&root.rightnode ==null||root.leftnode ==null&&root.rightnode !=null)

else

} else else }}

elseelse }}

}}

public static void search(treenode root,integer a)

if(a對陣列進行插入刪除查詢操作後結果:

這是二叉樹的新增操作後**輸出:

節點[左節點=節點[左節點=節點[左節點=節點[左節點=null, 右節點=null, 值=-9], 右節點=null, 值=0], 右節點=節點[左節點=null, 右節點=null, 值=3], 值=1], 右節點=節點[左節點=null, 右節點=節點[左節點=節點[左節點=null, 右節點=節點[左節點=null, 右節點=null, 值=13], 值=10], 右節點=節點[左節點=節點[左節點=null, 右節點=節點[左節點=null, 右節點=null, 值=54], 值=46], 右節點=節點[左節點=null, 右節點=null, 值=89], 值=83], 值=22], 值=8], 值=5]

由此可以得到:如上的二叉樹。

二叉搜尋樹的增刪查改

在實際生產中,一棵二叉搜尋樹的平均深度是log n 所以通常是遞迴的編寫二叉樹的操作 不需要太擔心爆棧的問題。對二叉樹的所有操作,無非就是從根節點 左子樹 右子樹這三者中入手,分析基本的 可能的情況後,再遞迴的編寫相應的操作即可。我們的重點放在insert 操作和 delete 操作中。insert...

二叉樹排序的增刪

1,二叉樹排序使用鍊錶鏈結生成的 主要在排序的過程需要進行判斷讓他在新增的時候有自己的方法 可以讓他查詢的時候比一般的鍊錶鏈結快再新增的時候比陣列也快 2,弊端是他的根節點是一開始就生成的 所以左右節點的wpl相差特別大 導致查詢會比普通單鏈表還慢 因為他會每次遞迴都會判斷有沒有左右節點帶去遞迴 這...

二叉樹,排序二叉樹

說到二叉樹,這可是資料結構裡面的非常重要的一種資料結構,二叉樹是樹的一種,本身具有遞迴性質,所以基於二叉樹的一些演算法很容易用遞迴演算法去實現。作為一種非線性結構,比起線性結構還是相對複雜的,很多人甚至看不懂演算法的意思,不能理解。其實一開始接觸這些東西還是挺暈的,不過你多看幾遍,上機實現可能你就會...