//查詢是否有某個元素,找到返回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...