91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言如何實現BST二叉排序樹

發布時間:2021-09-24 11:00:37 來源:億速云 閱讀:156 作者:小新 欄目:開發技術

這篇文章主要介紹了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二叉排序樹

感謝你能夠認真閱讀完這篇文章,希望小編分享的“C語言如何實現BST二叉排序樹”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沿河| 和田县| 抚顺市| 阿勒泰市| 敦煌市| 昌吉市| 墨玉县| 赤水市| 华池县| 铁力市| 仁寿县| 南汇区| 德格县| 准格尔旗| 古交市| 沾益县| 和龙市| 天峨县| 隆林| 方正县| 东乌珠穆沁旗| 忻城县| 石阡县| 祁东县| 米易县| 贺州市| 禹州市| 黎川县| 黑龙江省| 五峰| 河南省| 多伦县| 龙陵县| 长葛市| 英吉沙县| 开阳县| 当雄县| 富裕县| 宝鸡市| 阳高县| 鹿邑县|