您好,登錄后才能下訂單哦!
這篇文章主要介紹了C語言如何實現BST二叉排序樹,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
具體內容如下
BST-二叉排序樹的幾個基本操作。
頭文件聲明與函數定義
#include <stdio.h> #include <stdlib.h> typedef int ElemType; /** * 定義節點 */ typedef struct BSTNode{ ElemType data;//數據域 struct BSTNode *lchild,//左孩子 *rchild;//右孩子 }BSTNode; /** * 插入節點 */ int BST_InsertNode(BSTNode** bstNode,ElemType e); /** * 創建BST樹 */ void BST_Create(BSTNode** bstTree,ElemType* dataSet,int n); /** * 查找BST樹節點 */ BSTNode* BST_SearchNode(BSTNode** bstNode,ElemType e); /** * 遍歷BST樹節點 */ void BST_PrintNodes(BSTNode* bstNode);
函數編寫
#include "BSTree.h" /** * 插入節點 */ int BST_InsertNode(BSTNode** bstNode,ElemType e){ //如果BST樹為空,直接創建根節點 if (*bstNode==NULL) { *bstNode=(BSTNode*)malloc(sizeof(BSTNode)); (*bstNode)->data=e; (*bstNode)->lchild=NULL; (*bstNode)->rchild=NULL; return 1; } //如果BST樹不為空,則比較插入值與根節點值的大小關系 if ((*bstNode)->data==e) return 0;//關鍵值相同,則插入失敗 else if ((*bstNode)->data>e) return BST_InsertNode(&(*bstNode)->lchild,e);//大于插入值,將其作為左子樹節點 else if ((*bstNode)->data<e) return BST_InsertNode(&(*bstNode)->rchild,e);//小于插入值,將其作為右子樹節點 } /** * 創建BST樹 */ void BST_Create(BSTNode** bstTree,ElemType* dataSet,int n){ int i=0; *bstTree=NULL;//BST樹初始化為空 while (i<n) { printf("%d\t",dataSet[i]); BST_InsertNode(bstTree,dataSet[i++]); } printf("\n"); } /** * 查找BST樹節點 */ BSTNode* BST_SearchNode(BSTNode** bstNode,ElemType e){ if (*bstNode==NULL)//判空 return *bstNode; //查找結點 if ((*bstNode)->data==e)//驗證是否為根節點 return *bstNode; else if ((*bstNode)->data>e) { return BST_SearchNode(&(*bstNode)->lchild,e);//如果小于根節點的值,查找左子樹 }else { return BST_SearchNode(&(*bstNode)->rchild,e);//如果大于根節點的值,查找右子樹 } } /** * 遍歷BST樹節點 */ void BST_PrintNodes(BSTNode* bstNode){ if (bstNode==NULL)//根節點判空 { return; } //打印根節點的值 printf("%d\t",(bstNode)->data); //從根節點開始遍歷 if (bstNode->lchild!=NULL) BST_PrintNodes((bstNode)->lchild);//遍歷左子樹 if (bstNode->rchild!=NULL) BST_PrintNodes(bstNode->rchild);//遍歷右子樹 }
測試
#include "BSTree.h" int main(int argc,char** argv){ int i; ElemType arr[]={45,24,53,45,12,24,68,25,36,96,100,25,64,78};//只有4個元素,因為關鍵字重復的元素不能被插入 BSTNode* bstNode=NULL; BSTNode* bstTemp=NULL; //創建BST樹 BST_Create(&bstNode,arr,sizeof(arr)/sizeof(ElemType)); printf("%d\t%d\n",bstNode,bstNode->data); printf("%d\t%d\n",bstNode,bstNode->lchild->data); //查找結點 bstTemp=BST_SearchNode(&bstNode,53); printf("the aimed node is %d,\n",bstNode->data); //遍歷BST樹的所有節點 BST_PrintNodes(bstNode); printf("\n"); }
貼上測試結果如下,【插入和遍歷的節點數量不一致是因為-如果BST樹中的節點關鍵值相同,就終止插入操作】
感謝你能夠認真閱讀完這篇文章,希望小編分享的“C語言如何實現BST二叉排序樹”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。