创建二叉查找树的完整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建立成功。

时间: 2024-10-05 10:02:36

创建二叉查找树的完整C代码的相关文章

BST二叉排序树的查找和删除的完整C代码

二叉排序树的查找算法 假定二叉排序树的根节点指针为root,给定的关键字值为key,则查找算法可描述为: 置初值:p = root : 如果 key = p -> data ,则查找成功,算法结束: 否则,如果key < p->data ,而且 p 的左子树非空,则将 p 的左子树根送 p ,转步骤 2 :否则,查找失败,算法结束: 否则,如果 key > p->data ,而且 p 的右子树非空,则将 p 的右子树根送 p ,转步骤 2 :否则,查找失败,算法结束. //B

Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)

转载请注明出处:http://blog.csdn.net/anxpp/article/details/51512200,谢谢! 本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解. 下面代码中会使用这样一个例子:客户端发送一段算式的字符串到服务器,服务器计算后返回结果到客户端. 代码的所有说明,都直接作为注释,嵌入到代码中,看代码时就能更容易理解,代码中会用到一个计算结果的工具类,见文章代码部分. 相关的基础知识文章推荐: Linux 网络 I/O 模型简介(图文) Jav

php创建多级目录完整封装类操作

创建多级目录函数中调用创建指定下的指定文件的函数: public function create_dir($dir,$mode=0777) { return is_dir($dir) or ($this->create_dir(dirname($dir)) and mkdir($dir, $mode)); } 创建指定路径下的指定文件,string $path(需要包含文件名和后缀),boolean $over_write 是否覆盖文件,int $time 设置时间.默认是当前系统时间,int

通过代码管理工具 git 完成一次完整的代码管理过程

1.从公共远程fork一份自己的本地远程之后,从本地远程 clone 到本地 2.将本地代码跟公共远程代码做关联配置 git remote add upstream https://github.com/volojs/create-template.git 3.此时查看本地代码所配置的远程有哪些 git remote -v origin https://github.com/suqiuhui/create-template (fetch) origin https://github.com/su

原生js实现的创建和删除元素实例代码

原生js实现的创建和删除元素实例代码:在实际应用中,往往需要动态的创建和删除指定的元素,下面就通过代码实例介绍一下如何实现此功能.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title&g

00微信公众平台 - 以上五大功能整合,完整的代码。

一.代码实现如下(主程序代码,其他include代码见各个功能函数中) <?php /** * wechat php test * version 1 */ define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest(); $wechatObj->responseMsg(); //$wechatObj->valid(); class wechatCallbackapiTest

asp完整登陆代码

asp完整登陆代码<%option explicit强制浏览器重新访问服务器下载页面,而不是从缓存读取页面Response.Buffer = True Response.Expires = -1Response.ExpiresAbsolute = Now() - 1 Response.Expires = 0 Response.CacheControl = "no-cache" 主要是使随机出现的图片数字随机%><!--#include file="inc/c

创建后台任务的两种代码模式

创建后台任务的两种代码模式 后台任务是每个App都需要的一些行为,毕竟主线程是大爷,拖不起,伤不起,脏活累活都只能在不见天日的后台去做. 最简单的后台任务,可以说是直接开一个线程就可以了,或者说来个Service,再开个线程.但这些并不是官方认证的最佳实践,实际上,Google早就考虑到了这一点,并把这些需求进行了封装,给我们提供了非常好的后台任务解决方案,并在Training上进行了讲解: 官网镇楼: https://developer.android.com/training/best-ba

一段经典的js命名空间创建和链式调用代码

var YourGlobal = { namespace: function(ns) { var parts = ns.split('.'), object = this, i, len; for(i =0, len=parts.length; i<len; i++) { if(!object[parts[i]]) { object[parts[i]] = {}; } object = object[parts[i]]; } return object; } }; YourGlobal.name