資料結構 二叉排序樹

2021-09-28 18:08:49 字數 3607 閱讀 6572

;// 迴圈的新增結點到二叉排序樹

for(

int i =

0; i < arr.length; i++

)// 中序遍歷二叉排序樹

system.out.

println

("中序遍歷二叉排序樹~");

binarysorttree.

midorder()

;// 1, 3, 5, 7, 9, 10, 12

// 測試一下刪除葉子結點

binarysorttree.

delnode(12

);binarysorttree.

delnode(5

);binarysorttree.

delnode(10

);binarysorttree.

delnode(2

);binarysorttree.

delnode(3

);binarysorttree.

delnode(9

);binarysorttree.

delnode(1

);binarysorttree.

delnode(7

);system.out.

println

("root="

+ binarysorttree.

getroot()

);system.out.

println

("刪除結點後");

binarysorttree.

midorder()

;}}//建立二叉排序樹

class

binarysorttree

// 查詢要刪除的結點

public node search

(int value)

else

}// 查詢父結點

public node searchparent

(int value)

else

}// 編寫方法:

// 1. 返回的 以node 為根結點的二叉排序樹的最小結點的值

// 2. 刪除node 為根結點的二叉排序樹的最小結點

/** *

* @param node 傳入的結點(當做二叉排序樹的根結點)

* @return 返回的 以node 為根結點的二叉排序樹的最小結點的值

*/public

intdelrighttreemin

(node node)

// 這時 target就指向了最小結點

// 刪除最小結點

delnode

(target.value)

;return target.value;

}// 刪除結點

public

void

delnode

(int value)

else

// 如果我們發現當前這顆二叉排序樹只有乙個結點

if(root.left == null && root.right == null)

// 去找到targetnode的父結點

node parent =

searchparent

(value)

;// 如果要刪除的結點是葉子結點

if(targetnode.left == null && targetnode.right == null)

else

if(parent.right != null && parent.right.value == value)

}else

if(targetnode.left != null && targetnode.right != null)

else

else

}else

}else

else

}else}}

}}// 新增結點的方法

public

void

add(node node)

else

}// 中序遍歷

public

void

midorder()

else}}

//建立node結點

class

node

// 新增結點的方法

// 遞迴的形式新增結點,注意需要滿足二叉排序樹的要求

public

void

add(node node)

// 判斷傳入的結點的值,和當前子樹的根結點的值關係

if(node.value <

this

.value)

else

}else

else}}

// 查詢要刪除的結點

/** *

* @param value 希望刪除的結點的值

* @return 如果找到返回該結點,否則返回null

*/public node search

(int value)

else

if(value <

this

.value)

return

this

.left.

search

(value);}

else

return

this

.right.

search

(value);}

}// 查詢要刪除結點的父結點

/** *

* @param value 要找到的結點的值

* @return 返回的是要刪除的結點的父結點,如果沒有就返回null

*/public node searchparent

(int value)

else

else

if(value >=

this

.value &&

this

.right != null)

else}}

// 中序遍歷

public

void

midorder()

system.out.

println

(this);

if(this

.right != null)

}@override

public string tostring()

}執行結果:

資料結構 二叉排序樹

二叉排序樹是一種特殊結構的二叉樹,它作為一種表的組織手段,通常被稱為 樹表。可以作為一種排序和檢索的手段。定義 二叉排序樹或是空樹,或是具有下述性質的二叉樹 其左子樹上所有結點的資料值均小於根結點的資料值 右子樹上所有結點的資料值均大於或等於根結點的資料值。左子樹和右子樹又各是一棵二叉排序樹。對二叉...

資料結構 二叉排序樹

二叉排序樹 binarysorttree 具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 2 若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 3 左 右子樹也分別為二叉排序樹 include includeusing namespace std type...

資料結構 二叉排序樹

如果需要乙個滿足 支援排序性 高效插入 刪除操作 高效查詢的資料結構,怎麼做?先看看一些簡單的資料結構 1 排序順序表 陣列 查詢可以採用折半查詢演算法,時間效率為o log2n 插入 刪除操作的時間複雜度為o n 資料量大時,效率太低。2 排序單鏈表 只能採用順序查詢,時間複雜度為o n 不能採用...