二叉查找树(二叉排序树)创建 C/C++_c++创建一颗二叉排序树,实现二叉排序树查找算法。-程序员宅基地

技术标签: # 数据结构  C/C++  C++  二叉树  数据结构  

一棵空树,或者是具有下列性质的二叉树:

(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;

(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;

(3)左、右子树也分别为二叉排序树;

(4)没有键值相等的结点。

说白了就是无论是对整棵树还是其某棵子树,左子树的节点都比根节点小,右子树的节点都比根节点大

#include<stdio.h>
#include<stdlib.h>

typedef struct BinarySortTreeNode
{
	int data;								//数据域
	struct BinarySortTreeNode *lChild;		//左子树
	struct BinarySortTreeNode *rChild;		//右子树
}BSTNode;

/**
insertBSTNode()  插入节点
	node:树节点,须使用指针的引用(如果是C语言也可以用二级指针),意图修改地址
	element:节点数据域值
**/
void insertBSTNode(BSTNode * &node, int element)  
{
	if (NULL == node)
	{
		node = new BSTNode;
		node->data = element;
		node->lChild = NULL;
		node->rChild = NULL;
		return;
	}

	if (node->data == element)  // 不允许两个相同值的节点
	{
		return;
	}

	if (element < node->data)
	{
		insertBSTNode(node->lChild, element);
	}
	if (element > node->data)
	{
		insertBSTNode(node->rChild, element);
	}
	
}

void preOrder(BSTNode *root)	// 先序遍历
{
	if (root)
	{
		printf("%d  ", root->data);
		preOrder(root->lChild);
		preOrder(root->rChild);
	}
}

void inOrder(BSTNode *root)		// 中序遍历
{
	if (root)
	{
		inOrder(root->lChild);
		printf("%d  ", root->data);
		inOrder(root->rChild);
	}
}

void initBST(BSTNode *&root, int ele[], int len)	//创建二叉查找树,也要使用指针的引用
{
	if (NULL == ele || 0 == len)
	{
		return;
	}

	for (int i = 0; i < len; i++)
	{
		insertBSTNode(root, ele[i]);
	}
}

void freeTree(BSTNode *&root) //释放节点
{
	if (NULL == root)
	{
		return;
	}

	freeTree(root->lChild);
	freeTree(root->lChild);
	delete root;
	root = NULL;
}

int main()
{
	int ele[] = { 5,3,8,7,2,9,1,10,6,4 };
	int len = sizeof(ele) / sizeof(ele[0]);
	BSTNode *root = NULL;

	initBST(root,ele,len);
	printf("先序遍历:DLR:根左右:");
	preOrder(root);
	printf("\n中序遍历:LDR:左根右:");
	inOrder(root);
	printf("\n");
	freeTree(root);

	system("pause");
	return 0;
}

运行结果:

根据中序遍历和任一遍历,可以画出唯一的二叉树,方式就不提了。

可以看出:

先序遍历:5 3 2 1 4 8 7 6 9 10
中序遍历:1 2 3 4 5 6 7 8 9 10
后序遍历:1 2 4 3 6 7 10 9 8 5

这棵树也是一棵二叉排序树。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/feel_myself_is_lowB/article/details/108347389

智能推荐

IAR调试程序闪退问题_iar在debug时停止工作-程序员宅基地

文章浏览阅读1.7k次。问题:IAR调试STM32程序,点击调试按钮后软件自动关闭,并弹出报错提示框解决:将调试的接口模式改为SWD模式即可。我的原先设置为JTAG模式。_iar在debug时停止工作

100M宽带是多少网速_100m的宽带网速是多少兆-程序员宅基地

文章浏览阅读742次。100兆宽带的网速通常指的是每秒可以传输的数据量为100兆比特(Mb)。在此情况下,1兆比特(Mb)等于100万比特(Mbps),而1字节(B)等于8比特(bps)。因此,100兆宽带的网速可以计算如下:100兆比特/秒=100/8 兆字节/秒= 12.5兆字节/秒所以,100兆宽带的网速约为12.5MBps(兆字节/秒),也可以说为100Mbps(兆比特/秒)。但是需要注意的是,实际的下载和上传速度可能受到各种因素的影响,如网络拥堵、设备性能等。因此,实际使用中您可能会感受到较低的速度。_100m的宽带网速是多少兆

Windows 7 通用 CDC 串口驱动程序_cdcserial驱动 win7-程序员宅基地

文章浏览阅读2.4w次,点赞13次,收藏44次。Windows 7 通用 CDC 串口驱动程序Windows 7 自带 CDC 串口类设备的驱动程序文件 usbser.sys,所缺的是驱动配置文件 usbser.inf 文件,将 Windows 10 的 usbser.inf 文件拷贝到 Windows 7,注释掉 SourceDisksNames 和 SourceDisksFiles 部分就可以作为 Windows 7 的 CDC 串口类..._cdcserial驱动 win7

AI遮天传 NLP-词表示_nlp中词语的表示-程序员宅基地

文章浏览阅读2.5k次,点赞53次,收藏51次。NLP-词表示_nlp中词语的表示

sed 替换多个空格为一个-程序员宅基地

文章浏览阅读2.4k次。sed -i 's/[ ][ ]*/ /g' file.txt _sed 多个空格替换为1个

SpringBoot整合Dubbo,重温记录一下_springboot dubbo整合日志-程序员宅基地

文章浏览阅读125次。1. 创建maven聚合工程,结构如下:2. 父工程pom.xml文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 ht_springboot dubbo整合日志

随便推点

Windows上的巧克力味Chocolatey详解_chocolate怎么卸载-程序员宅基地

文章浏览阅读1.5k次。Chocolatey是什么?很简单,Chocolatey就是Windows系统的yum或apt-get。一、Chocolatey介绍Chocolatey是一款专为Windows系统开发的、基于NuGet的包管理器工具,类似于Node.js的npm,MacOS的brew,Ubuntu的apt-get,它简称为choco。Chocolatey的设计目标是成为一个去中心化的框架,便于开发_chocolate怎么卸载

关于Python的三个谎言,别再盲目学Python了_关于python 盲目-程序员宅基地

文章浏览阅读2.3w次,点赞177次,收藏741次。Python作为21世纪最火的编程语言,市面上各种学习视频层出不穷,关于Python的学习氛围也逐渐浓厚,Python固然简单好上手,但事实上Python也不是那么容易学习的。如果不采取正确的学习方式,很容易走入误区。关于Python的三个谎言,你一定要清楚。1: 学完Python,并不能立马拿一两万的工资,甚至可能找不到工作!2:Python也没有那么简单,不是有手就行!3:别想着1个星期、2个星期就能学会,你至少得腾出一两个月来连续学习!如果你还是执意要学Python,那么好,接下来我们看看怎._关于python 盲目

js 实现将json数据导出到excel表格-程序员宅基地

文章浏览阅读2.1k次。方法一将table标签,包括tr、td等对json数据进行拼接,将table输出到表格上实现,这种方法的弊端在于输出的是伪excel,虽说生成xls为后缀的文件,但文件形式上还是html,代码如下<html><head> <p style="font-size: 20px;color: red;">使用table标签方式将json导出xls文件</p..._如何把js数据转换成表格

IEEE协会会员权益,注册IEEE会员有必要了解下_ieee会员好处-程序员宅基地

IEEE协会是一个专注于航空与电子系统领域的组织,注册IEEE会员可以享受许多权益,包括免费访问协会资源中心和参加各种会议及活动。

前端自学路线图之移动Web自学,2024前端目前最稳定和高效的UI适配方案-程序员宅基地

文章浏览阅读774次,点赞20次,收藏14次。除了简历做到位,面试题也必不可少,整理了些题目,前面有117道汇总的面试到的题目,后面包括了HTML、CSS、JS、ES6、vue、微信小程序、项目类问题、笔试编程类题等专题。CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

计算数组中每个数字出现的次数_统计数组中每个数字出现的次数-程序员宅基地

文章浏览阅读3.9k次。var arr = [12,31,42,54,65,12,31,12,42,22];//统计个数var arr2 = {};arr.forEach(function(item){ if(arr2[item]){ arr2[item] += 1; }else{ arr2[item] = 1; }})console.log(arr2);_统计数组中每个数字出现的次数

推荐文章

热门文章

相关标签