詳細實現了二叉查詢樹的各種操作:插入結點、構造二叉樹、刪除結點、查詢、 查詢最大值、查詢最小值、查詢指定結點的前驅和後繼
它或者是一棵空樹;或者是具有下列性質的二叉樹: (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; }}
//根據關鍵字刪除某個結點
//如果把根結點刪掉,那麼要改變根結點的位址,所以傳二級指標
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的鍵值。根據這一特點,我們就能實現一棵二叉搜尋樹。二叉搜...