建立二叉查詢樹的完整C程式碼
BST
基本概念
- 二叉查詢樹(Binary Search Tree),又稱二叉排序樹(Binary Sort Tree)。
- 它或者是一棵空樹;或者是具有下列性質的二叉樹: (1)若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; (2)若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; (3)左、右子樹也分別為二叉排序樹;
- 簡單的說就是:左孩子<雙親結點<右孩子。
因此,對查詢二叉樹進行中序遍歷,得到的是一個從小到大排序的數列。
建立BST的完整C程式碼
/* 建立BST的C程式碼實現 */ #include <stdio.h> #include <stdlib.h> typedef int Elemtype; typedef struct BiTNode{ Elemtype data; struct BiTNode *lchild, *rchild; }BiTNode, *BiTree; //在給定的BST中插入結點,其資料域為element int BSTInsert( BiTree *t, Elemtype element ) { if( NULL == *t ) { (*t) = (BiTree)malloc(sizeof(BiTNode)); (*t)->data = element; (*t)->lchild = (*t)->rchild = NULL; return 1; } if( element == (*t)->data ) return 0; if( element < (*t)->data ) return BSTInsert( &(*t)->lchild, element ); return BSTInsert( &(*t)->rchild, element ); } //建立BST void CreateBST( BiTree *t, Elemtype *a, int n ) { (*t) = NULL; for( int i=0; i<n; i++ ) BSTInsert( t, a[i] ); } //中序遍歷列印BST void PrintBST( BiTree t ) { if( t ) { PrintBST( t->lchild ); printf("%d ", t->data); PrintBST( t->rchild ); } } int main() { int n; int *a; BiTree t; printf("請輸入二叉查詢樹的結點數:\n"); scanf("%d", &n); a = (int *)malloc(sizeof(int)*n); printf("請輸入而查詢樹的結點:\n"); for( int i=0; i<n; i++ ) scanf("%d", &a[i]); CreateBST( &t, a, n ); printf("該BST的中序遍歷結果為:\n"); PrintBST( t ); printf("\n"); return 0; }
測試資料以及測試結果
經過除錯,可以確認得到的二叉樹為下圖:
BST建立成功。
相關推薦
建立二叉查詢樹的完整C程式碼
BST 基本概念 二叉查詢樹(Binary Search Tree),又稱二叉排序樹(Binary Sort Tree)。它或者是一棵空樹;或者是具有下列性質的二叉樹: (1)若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; (2)若右子樹不空,則右子樹上所有結
二叉搜尋樹的C++程式碼實現
template<class K,class V> struct BinaryNode{ K _key; V _value; BinaryNode<K,V>* _left;
資料結構之 二叉查詢樹(C語言實現)
資料結構之 二叉查詢樹 1. 二叉查詢樹的定義 二叉查詢樹(binary search tree)是一棵二叉樹,或稱為二叉搜尋樹,可能為空;一棵非空的二叉查詢樹滿足一下特徵: 每個元素有一個關鍵字,並且任意兩個元素的關鍵字都不同;因此,所有的關鍵字都是唯
二叉查詢樹(二叉排序樹)建立、插入、刪除、查詢-C語言
二叉查詢樹:或者是一顆空樹;或者是具有以下性質的二叉樹:(1)若它的左子樹不為空,則左子樹上所有結點的值都小於根結點的值;(2)若它的右子樹不為空,則右子樹所有結點的值均大於它的根結點的值;(3)左右子樹分別為二叉查詢樹; #include <std
C++資料結構 17 二叉查詢樹
Bst(Binary Search Tree) 有以下性質: 每一個元素有一個鍵值,而且不予許重複 左子樹的鍵值都小於根節點的鍵值 右子樹的鍵值都大於根節點的鍵值 左右子樹都是二叉查詢樹 程式碼: #ifndef __BST_H__ #
(方法)給定一個有序數列,通過中序遍歷利用陣列建立起二叉查詢樹(PAT1064)
建樹的時候,有時候沒有必要大費周章地去通過結點構造一棵二叉樹,我們利用各結點之間的數學關係,通過陣列就可以實現一棵二叉樹,假設結點序列為a,那麼其左子就是a*2,右子就是a*2+1 由於二叉樹中序遍歷的結果是一串有序序列,那麼我們可以通過中序來得到一棵二叉樹 void l
C++:二叉查詢樹實現(二)——遍歷操作
建立好二叉樹,有時候我們需要對整個二叉樹錦星遍歷,即輸出二叉樹的所有結點元素。理論上,遍歷的方式有無數種,順序可以自己任意選定,但是絕大部分遍歷方式在實際中並沒有用處,比較有用的的遍歷方式有兩種:廣度優先遍歷、深度優先遍歷。 (1)廣度優先遍歷
二叉查詢樹的查詢、插入、刪除、釋放等基本操作的實現(C語言)
二叉查詢樹是一種特殊性質的二叉樹,該樹中的任何一個節點,它的左子樹(若存在)的元素值小於節點的元素值,右子樹(若存在)的元素值大於節點的元素值。 實現了二叉樹查詢樹的實現以及基本操作,包括查詢、插入、刪除、初始化、釋放等。 原始碼下載地址:http://download.c
173. Binary Search Tree Iterator(二叉查詢樹迭代器)的C++解法
注意是二叉查詢樹,意味著左子樹<根<右子樹,因此,如果沒有特殊要求,只需要中序遍歷樹,將每個結點儲存即可。 但是題目要求空間複雜度為O(h),h是二叉查詢樹的深度,因此考慮每次只放一部分樹的結點入棧。首先我們知道根的左子樹的左子樹的左子樹...一直到最左的左子樹L一定是最小值,那
資料結構——二叉查詢樹的詳細實現(c++)
本文實現了二叉查詢樹的前序遍歷(遞迴與非遞迴)、中序遍歷(遞迴與非遞迴)、後序遍歷(遞迴與非遞迴)、插入過程、刪除過程、查詢過程等。 二叉樹的簡單介紹: 1、二叉樹中的每個節點都不能有多餘兩個的兒子。 2、二叉樹的深度要比N小得多。 假設每個節點被指
二叉查詢樹C語言實現及其視覺化
0, 二叉搜尋樹的定義:(二叉查詢樹)(二叉排序樹) (1)若左子樹非空,則左子樹上的所有的節點的值都小於根節點的值 (2)若右子樹非空,則右子樹上的所有的節點的值都大於根節點的值 (3)其左右子樹都是二叉搜尋樹
[C++日常小題] 計算二叉查詢樹的高度
Description 給定一個二叉查詢樹,要求計算其高度,每個二叉查詢樹將給出先序與中序的遍歷。 例如:一個二叉查詢樹其先序遍歷為:16, 10, 4, 15, 23 ; 中序遍歷為 4, 10, 15, 16, 23,則其高度為2(假定空樹高度為-1,只
演算法練習之二叉查詢樹 C++實現
/////////////////Tnode.h//////////////// class TNode { public: ////methods TNode(void); TNode(int data); ~TNode(void);
js實現二叉查詢樹的建立、插入、刪除、遍歷操作
1 概念 二叉排序樹(二叉查詢樹),它或者是一顆空樹,或者是具有以下性質的二叉樹: 任意一個結點左子樹上的所有結點值均小於該結點值 任意一個結點右子樹上的所有結點值均大於該結點值 例如下圖: 2 插入和建立二叉排序樹 結點的資料結構 fu
[C語言實現]實現二叉查詢樹基本操作(遞迴版,圖示)
定義 二叉查詢樹是一種特殊的二叉樹,它不僅是一顆二叉樹,還滿足如下性質 對於任何非葉子節點,他的左節點都小於它本身,而右節點都大於其本身. 它的左右子樹也分別而二叉搜尋樹 一般情況下,在這麼一棵樹中進行查詢,它的時間複雜度是 longnlon
二叉排序樹——完整程式碼實現
二叉排序樹,又稱二叉查詢樹。它或者是一顆空樹,或者是具有下列性質的二叉樹。 (1) 若他的左子樹不為空,則左子樹上所有結點的值均小於他的根結點的值。 (2) 若他的右子樹不為空,則右子樹上所有結點的值均大於他的根結點的值。 (3) 他的左
C#實現二叉查詢樹
/// <summary> /// 二叉樹節點的定義 /// </summary> public class Node { //本身的資料 public int dat
建立一顆最小二叉查詢樹
struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x):val(x),left(NULL),right(NULL){} }; TreeNode *createBST(vector<int> arr,in
C語言實現二叉查詢樹(BST)的基本操作
我們在上一篇部落格中講解了二叉樹,這一次我們來實現二叉樹的進階——二叉查詢樹(Binary Search Tree),又稱二插排序樹(Binary Sort Tree)。所以簡稱為BST。二插查詢樹的定義如下:1.若左子樹不為空,則左子樹上所有節點的值均小於它的根節
《資料結構與演算法C#語言描述》筆記12_二叉樹和二叉查詢樹
樹的定義 樹,由邊連線的一些列節點。樹是一種非線性的資料結構。 根節點,樹上最高的節點。 父節點,某個節點的上層節點。 子節點,某個節點的下層節點。 葉子,沒有任何子節點。 二叉樹 二叉樹,子節點的數量不超過兩個的樹。 父節點的兩個節點分別稱為左節點和有節點。 二叉查詢樹