二叉搜尋樹的簡單實現

2021-10-05 08:53:20 字數 1801 閱讀 4537

//查詢是否有某個元素,找到返回true,找不到返回false

public

boolean

contains

(int key)

else

if(key

else

}return

false;}

//插入某元素,如果已經包含該元素則返回false,插入成功就返回true

public

boolean

insert

(int key)

node cur=root;

node parent=null;

while

(cur!=null)

else

if(key

else

} node node=

newnode

(key);if

(key

else

return

true;}

//刪除節點

/* parent 為要刪除的節點的雙親,cur為要刪除的節點

分4種情況:

1.cur為葉子節點,既沒有左孩子也沒有右孩子

i)cur為根節點

ii)cur為parent的左孩子

iii)cur為parent的右孩子

2.cur只有左孩子沒有右孩子

i)cur為根節點

ii)cur為parent的左孩子

iii)cur為parent的右孩子

3.cur只有右孩子沒有左孩子

i)cur為根節點

ii)cur為parent的左孩子

iii)cur為parent的右孩子

4.cur左右孩子都有

不能直接刪除,需要找乙個替代元素,但一定要滿足搜尋樹的性質,

可以找cur右子樹中最小的(最左側)的元素,

也可以找cur左子樹中最大的(最右側)的元素。

*/private

boolean

remove

(int key)

else

if(key

else

}return

false;}

private

void

removenode

(node parent, node cur)

else

if(cur==parent.left)

else

if(cur==parent.right)

}else

if(cur.right==null)

else

if(cur==parent.left)

else

if(cur==parent.right)

}else

cur.val=goat.val;

//找的是cur右子樹最左側的節點,則該節點肯定沒有左孩子

if(goat==goatparent.left)

else

if(goat==goatparent.right)}}

}

二叉搜尋樹的簡單實現

上述條件反之亦可 接近二分查詢,最大查詢次數為樹的高度,平均查詢次數log2 n template class t struct bstnode template class t class bstree else if cur val val else if cur val val return ...

二叉搜尋樹的簡單實現

二叉搜尋樹又稱二叉排序樹,它或者是一棵空樹,或者是具有以下性質的二叉樹 1.若它的左子樹不為空,則左子樹上所有節點的值都小於根節點的值 2.若它的右子樹不為空,則右子樹上所有節點的值都大於根節點的值 3.它的左右子樹也分別為二叉搜尋樹 pragma once templatestruct bstre...

bst 二叉搜尋樹簡單實現

陣列實現二叉樹 1.下標為零的元素為根節點,沒有父節點 2.節點i的左兒子是2 i 1 右兒子2 i 2 父節點 i 1 2 3.下標i為奇數則該節點有有兄弟,否則又左兄弟 4.對bst樹的操作主要有插入,刪除,後繼前驅的查詢,樹最大最小節點檢視 include using namespace st...