1. 程式人生 > >建立二叉查詢樹的完整C程式碼

建立二叉查詢樹的完整C程式碼

BST

基本概念

  1. 二叉查詢樹(Binary Search Tree),又稱二叉排序樹(Binary Sort Tree)。

  2. 它或者是一棵空樹;或者是具有下列性質的二叉樹: (1)若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; (2)若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; (3)左、右子樹也分別為二叉排序樹;

  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_查詢

樹的定義 樹,由邊連線的一些列節點。樹是一種非線性的資料結構。 根節點,樹上最高的節點。 父節點,某個節點的上層節點。 子節點,某個節點的下層節點。 葉子,沒有任何子節點。 二叉樹 二叉樹,子節點的數量不超過兩個的樹。 父節點的兩個節點分別稱為左節點和有節點。 二叉查詢樹