樹論之二叉搜尋樹

2021-10-01 19:48:25 字數 2459 閱讀 4841

二叉查詢樹(binary search tree),(又:二叉搜尋樹,二叉排序樹)它或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 它的左、右子樹也分別為二叉排序樹。

如果要刪除的節點是葉子節點 直接刪除,父節點對應子樹設為null

如果要刪除的節點只有乙個子樹,父節點指向當前節點的子樹。

如果要刪除的節點有2個子樹,則先找到當前節點的後繼節點,把後繼節點的值賦值給當前節點。刪除後繼節點,因為後繼節點肯定不會有2個子樹。

public

class

mybinaryseachtree

}public

mybinaryseachtree

(int data)

/** * 正常插入法

* @param data

*/public

void

insert

(int data)

else

while

(true

)else

if(pa == null && node.data < root.data)

if( node.data >= pa.data)

pa.right = node;

node.parent = pa;

node.position =

true

;break;}

else

if(node.data < pa.data )

pa.left = node;

node.parent = pa;

break;}

}}/** * 遞迴插入法

* @param root

* @param data

*/public

void

insert

(treenode root ,

int data)

insert

(root.right, data);}

else

insert

(root.left, data);}

}public treenode search

(treenode root ,

int data)

if( data > root.data)

else

if(data < root.data )

else

}private treenode findnextnode

(treenode node)

return parent;

}/**

* 9

* 7 11

* 5 8 10 16(x)

*2 6 12 24

* 19 26

* 20 28

* * 1.要刪除的結點是葉子結點 o(1)

* 2.要刪除的結點只有乙個子樹(左或者右)o(1)

* 3.要刪除的結點有兩顆子樹:找後繼結點,而且後繼結點的左子樹一定為空。

* *

* @param data

*/public

void

remove

(int data)

private

void

remove

(treenode node)

else}}

public

void

print()

private

void

show

(treenode node)

show

(node.left)

; system.out.

print

(node.data+

" ")

;show

(node.right);}

public

static

void

main

(string[

] args)

; mybinaryseachtree root =

newmybinaryseachtree

(data[0]

);//第乙個點作為跟結點

for(

int i =

1; i < data.length ; i ++

) root.

print()

; root.

remove(16

);system.out.

println

("刪除節點:"+16

);root.

print()

;}}

樹論 二叉搜尋樹

package com.redis.redandblack 特點 1.如果它的左子樹不為空,則左子樹上的節點值小於根節點 2.如果它的右子樹不為空,則右子樹上的節點值大於等於根節點 3.子樹同樣遵循以上兩點 只要一棵樹是二叉查詢樹,那麼中序遍歷一定是有序的 二叉查詢演算法?歸併排序 每一次分一半,最...

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...

演算法框架之二叉樹擴充套件 二叉搜尋樹

二叉樹基礎遍歷 在上一章以解釋過 演算法框架之陣列 鍊錶 二叉樹 如何判斷兩棵二叉樹是否完全相同?先來道開胃菜 應該很好理解 一共會出現三種情況 空的情況 都空 乙個空 非空情況 遞迴 definition for listnode.function listnode val param root1...