二叉排序樹
定義:1)若它的左子樹非空,則左子樹的所有節點都小於它的根節點;
2)若它的右子樹非空,則右子樹的所有節點都小於它的根節點;
3)它的左右字數也分別為二叉排序樹。
二叉排序樹的建立和插入節點
**實現
int bst_insert(treenode **root, int data)
else if(data < (*root)->data)
return bst_insert(&(*root)->lchild,data);
else if(data > (*root)->data)
return bst_insert(&(*root)->rchild,data);
else
return error;
}treenode *create_search_tree(int *arr, int size)
二叉排序樹的節點刪除
刪除過程要記錄刪除節點(del)的父親節點(pre),節點刪除有4種情況
1)刪除葉子節點,將父親節點指向刪除節點的指標置為null
2)刪除節點只有左子樹,父親節點指向刪除節點的指標指向刪除節點的左孩子
3)刪除節點只有右子樹,父親節點指向刪除節點的指標指向刪除節點的右孩子
4)刪除節點既有左子樹也有右子樹,刪除節點左子樹的最大節點賦值給刪除節
點,此時要刪除子樹的最大節點。
**實現
int bst_delete(treenode *root, int data)
else if(data > pos->data)
else
else if(pos->rchild == null)
else if(pos->lchild == null)
else
pos->data = del->data;//pos節點左子樹中最大節點賦值給pos節點
if(pos == parent)//pos節點左子數最大節點是子樹的根節點
pos->lchild = del->lchild;
else //parent節點的rchild指向del節點的左子樹
parent->rchild = del->lchild;
free(del);
return ok;
}} }
return error;
}
二叉排序樹相關操作(C C )
目錄 1 建立二叉樹 遞迴 2 建立二叉樹 非遞迴 3 前序遍歷 非遞迴 4 中序遍歷 非遞迴 5 後續遍歷 非遞迴 建立ordertree bitree t,int data void ordertree bitree t,int data else if data t data else if ...
二叉排序樹及相關操作說明
在講到集合的時候,很容易讓人想到的是陣列和鍊錶。然後大家會討論這兩種資料結構的差異。但是根據指定的內容在集合中查詢,這兩種資料結構的效能卻沒有區別都是o n 如何提高在集合中檢索指定內容資料的效能,是我們在程式開發中面臨的問題。左子樹不空時,左子樹上所有的結點關鍵字的值均小於根結點關鍵字的值 右子樹...
二叉排序樹的操作
二叉排序樹的建立,中序遍歷,前序遍歷,後序遍歷,計算總結點數,計算樹的深度 二叉排序樹的建立 void creattree tree t,int m if melement creattree t lchild,m else creattree t rchild,m 前序遍歷 void preord...