資料結構與演算法問題 二叉搜尋樹

2021-09-07 11:54:08 字數 1735 閱讀 5471

具體實現了二叉查詢樹的各種操作:插入結點、構造二叉樹、刪除結點、查詢、  查詢最大值、查詢最小值、查詢指定結點的前驅和後繼

它或者是一棵空樹;或者是具有下列性質的二叉樹: (1)若左子樹不空,則左子樹上全部結點的值均小於它的根結點的值。 (2)若右子樹不空。則右子樹上全部結點的值均大於它的根結點的值; (3)左、右子樹也分別為二叉排序樹

此處給出**。凝視很具體。具體操作請參考**:

#include using namespace std;

typedef struct binary_search_tree //結點結構體

binary_search_tree ;

void insert(binary_search_tree * & root,int data) //插入

//插入到當前父節點的右節點

if(root->rchild==null&&root->datarchild=p;

p->parent=root;

return ;

} //插入到當前父結點的左節點

if(root->lchild==null&&root->data>data)

if(root->data>data)

insert(root->lchild,data);

else if(root->data < data)

insert(root->rchild,data);

else

return;

}void create(binary_search_tree * & root,int a,int size)

//遞迴方式找到最小的元素

binary_search_tree * searchmin(binary_search_tree * &root)

//遞迴方式尋找最大的元素

binary_search_tree * searchmax(binary_search_tree * &root)

//查詢某個節點的前驅

binary_search_tree * seachpredecessor(binary_search_tree * & p)

return p->parent; }}

//查詢某個元素的後繼

binary_search_tree * searchsuccessor(binary_search_tree * & p)

return p->parent; }}

//依據keyword刪除某個結點

//假設把根結點刪掉。那麼要改變根結點的位址,所以傳二級指標

void deletetree(binary_search_tree * & root,int data)

else

}//假設有左結點,沒有右結點

if(p->lchild&&!(p->rchild))

//假設有右結點。沒有左結點

else if(p->rchild&&!(p->lchild))

//假設既有左結點,又有右結點

else if(p->rchild&&p->lchild)

else }

int main()

; create(root,a,11);

binary_search_tree * x=new binary_search_tree;

deletetree(root,21); //刪除結點21

x=searchmin(root);

coutcoutcout<

資料結構與演算法問題 二叉搜尋樹

詳細實現了二叉查詢樹的各種操作 插入結點 構造二叉樹 刪除結點 查詢 查詢最大值 查詢最小值 查詢指定結點的前驅和後繼 它或者是一棵空樹 或者是具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 2 若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 3 左 右...

資料結構與演算法之二叉搜尋樹

看到有個傢伙寫的很好 二叉查詢樹 二 之 c 的實現 二叉搜尋樹的定義 一棵二叉樹,可能為空 一棵非空的二叉搜尋樹滿足以下特徵 每個元素有乙個關鍵字,並且任意兩個元素的關鍵字都不同,因此,所有的關鍵字都是唯一的。在根節點的左子樹中,元素的關鍵字 如果有的話 都小於根節點的關鍵字。在根節點的右子樹中,...

演算法與資料結構之二叉搜尋樹

搜尋樹與二叉搜尋樹 搜尋樹是一種可以進行插入 搜尋 刪除等操作的資料結構。它可以用作字典或者優先順序佇列。二叉搜尋樹是最基本的搜尋樹。它的各個結點都有鍵值,並且滿足以下的條件 設x是二叉搜尋樹中的結點,y是它的左子樹中的結點,那麼,y的鍵值 x的鍵值。根據這一特點,我們就能實現一棵二叉搜尋樹。二叉搜...