技术标签: # 数据结构 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
这棵树也是一棵二叉排序树。
文章浏览阅读1.7k次。问题:IAR调试STM32程序,点击调试按钮后软件自动关闭,并弹出报错提示框解决:将调试的接口模式改为SWD模式即可。我的原先设置为JTAG模式。_iar在debug时停止工作
文章浏览阅读742次。100兆宽带的网速通常指的是每秒可以传输的数据量为100兆比特(Mb)。在此情况下,1兆比特(Mb)等于100万比特(Mbps),而1字节(B)等于8比特(bps)。因此,100兆宽带的网速可以计算如下:100兆比特/秒=100/8 兆字节/秒= 12.5兆字节/秒所以,100兆宽带的网速约为12.5MBps(兆字节/秒),也可以说为100Mbps(兆比特/秒)。但是需要注意的是,实际的下载和上传速度可能受到各种因素的影响,如网络拥堵、设备性能等。因此,实际使用中您可能会感受到较低的速度。_100m的宽带网速是多少兆
文章浏览阅读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
文章浏览阅读2.5k次,点赞53次,收藏51次。NLP-词表示_nlp中词语的表示
文章浏览阅读2.4k次。sed -i 's/[ ][ ]*/ /g' file.txt _sed 多个空格替换为1个
文章浏览阅读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整合日志
文章浏览阅读1.5k次。Chocolatey是什么?很简单,Chocolatey就是Windows系统的yum或apt-get。一、Chocolatey介绍Chocolatey是一款专为Windows系统开发的、基于NuGet的包管理器工具,类似于Node.js的npm,MacOS的brew,Ubuntu的apt-get,它简称为choco。Chocolatey的设计目标是成为一个去中心化的框架,便于开发_chocolate怎么卸载
文章浏览阅读2.3w次,点赞177次,收藏741次。Python作为21世纪最火的编程语言,市面上各种学习视频层出不穷,关于Python的学习氛围也逐渐浓厚,Python固然简单好上手,但事实上Python也不是那么容易学习的。如果不采取正确的学习方式,很容易走入误区。关于Python的三个谎言,你一定要清楚。1: 学完Python,并不能立马拿一两万的工资,甚至可能找不到工作!2:Python也没有那么简单,不是有手就行!3:别想着1个星期、2个星期就能学会,你至少得腾出一两个月来连续学习!如果你还是执意要学Python,那么好,接下来我们看看怎._关于python 盲目
文章浏览阅读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会员可以享受许多权益,包括免费访问协会资源中心和参加各种会议及活动。
文章浏览阅读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);_统计数组中每个数字出现的次数