二叉查詢樹 C語言實現

2021-07-02 16:09:27 字數 2129 閱讀 9316

二叉查詢樹:若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;它的左、右子樹也分別為二叉查詢樹。

在使用遞迴的時候,假如函式有返回值,記得接收返回值,並且保證函式在每個板塊結束後都有return,以防出錯。具體見find、insert、delete等函式的實現過程。

find:通過比較根資料域的值和輸入引數的大小遞迴呼叫實現。

findmin:一直往左遞迴

findmax:一直往右遞迴

insert:通過比較根資料域的值和輸入引數的大小關係進行遞迴,每次遞迴結束都返回當前根值

delete:訪問方式同insert,假如要刪除的節點有乙個或沒有子節點,容易刪除,不贅述;假如有兩個子節點,則先找出其右子樹中的最小值,賦給該節點,然後遞迴刪除其右子樹中的最小節點。

printtree:先序遍歷訪問節點並列印

#ifndef searchbitree_h

#define searchbitree_h

struct searchbitree; //二叉查詢樹結構體

typedef searchbitree * sbitree; //二叉查詢樹 樹節點指標

typedef int elemtype; //資料域資料型別

struct searchbitree;

//清空樹,返回根位址給根節點

sbitree makeempty(sbitree b);

//查詢樹b中有無值為e的資料域,有則返回true

bool find(elemtype e, sbitree b);

//返回樹b中的最小值,若b為空,返回-1

elemtype findmin(sbitree b);

//返回樹b中的最大值,若b為空,返回-1

elemtype findmax(sbitree b);

//為樹b插入e,成功則返回樹根位址

sbitree insert(elemtype e, sbitree b);

//刪除樹b中的e資料域,成功則返回樹根位址

sbitree delete(elemtype e, sbitree b);

//先序遍歷樹b並列印,值域為空則輸出0

void printtree(sbitree b);

#endif

#include #include #include "searchbitree.h"

sbitree makeempty(sbitree b)

return null;

}bool find(elemtype e, sbitree b)

else if (b->elem < e)

else

} return false;

}elemtype findmin(sbitree b)

else

} return -1;//樹為空,返回-1

}elemtype findmax(sbitree b)

else

} return -1;//樹為空,返回-1

}sbitree insert(elemtype e, sbitree b)

else if (e < b->elem)

else

} else

return b; //這個必須加,假如不加,函式在執行比如61行之後,會出現沒有返回值的情況,會發生什麼?

}sbitree delete(elemtype e, sbitree b)

else if (b->left == null)

}else

} b->left = delete(e, b->left);

return b;//將子節點位址返回給父節點

} b->right = delete(e, b->right);

return b;

} }else

}void printtree(sbitree b)

else

}

#include #include #include "searchbitree.h"

int main()

二叉查詢樹C語言實現

二叉查詢樹c語言實現 1.二叉查詢樹的定義 左子樹不為空的時候,左子樹的結點值小於根節點,右子樹不為空時,右子樹的結點值大於根節點,左右子樹分別為二叉查詢樹 2.二叉查詢樹的最左邊的結點即為最小值,要查詢最小值,只需遍歷左子樹的結點直到為空為止,同理,最右邊的結點結尾最大值,要查詢最大值,只需遍歷右...

二叉查詢樹 C語言實現

構造一顆二叉查詢樹,實現樹的插入 刪除等基本操作 include includetypedef struct node node,pnode int array 100 按序儲存遍歷後的元素 int k 0 陣列array長度 初始化一顆二叉排序樹 pnode init 插入結點 void inse...

二叉查詢樹(BST)及其C語言實現

對任何節點x,其左子樹中的關鍵字最大不超過key x 右子樹中的關鍵字最小不小於key x 二叉查詢樹這種資料結構,它支援多種動態集合操作,search,minimum,maximum,predecessor 前驅 successor 後繼 insert以及delete。在二叉查詢樹上執行的基本操作...