顺序存储结构

#include <stdio.h>
//用顺序数组的形式,存储建立一个二叉搜索树
/*
1,我们根据完全二叉树的编号,我们做数组角标1存储输入的第一个元素
2,得到根元素之后,我们开始建立这样的二叉树若元素的值大于根节点,则将元素往根节点的右子节点移动,若此节点为空那么,存入,否则,直到找到这个空位置若元素的值小于根节点,按么则将元素往根节点的左子节点移动,直到找到空位存储之
注意,如何寻找节点的左右子节点呢?
用左节点为父节点×2,右子节点为父节点×2+1,
根据这个关系,找到角标,存储之。
*/
void create_btree(int b_tree[], int nodelist[], int len) {int i;int level;//树的层级,我们用这个level去推进计算将要插入的数字的角标,//直白的说,就是确定它的树中位置b_tree[1] = nodelist[1];for (i = 2;i < len;i++) {level = 1;//每一个新元素在二叉搜索树的位置都是通过根节点进行搜索while (b_tree[level] != 0) {//0表示当前的子树位置是空的 if (nodelist[i] < b_tree[level]) {level = level * 2;}else {level = level * 2 + 1;}}//出了循环,说明新元素在二叉搜索树中的位置就定下了b_tree[level] = nodelist[i];}}//若一棵树的左子树所有的值都比根节点的值小,右子树的值都比根大
//这样的二叉树,我们成为二叉查找树(Binary search tree)
int main1(void){int b_tree[16] = { 0 };int nodelist[16] = { 0, 6,3,8,5,2,9,4,7,10,0,0,0,0,0,0};//根据角标的定义,我们的数组形式不用0开始做编号create_btree(b_tree, nodelist, 16);for (int i = 1;i < 16;i++) {printf("%d,[%d] \n", i, b_tree[i]);}getchar();return 0;
}

链式存储结构

#include <stdio.h>
#include <stdlib.h>
typedef int datatype ;
typedef struct node {datatype data;struct node *left, *right;
}BitTree;
//辅助队列Q,这是用来存关系的
BitTree* Q[16];//这是一个指针数组,它将缓存节点的地址,因为这个地址将以
//left域,或者right域进入二叉链表,它本身不维护i,2i,2i+1的关系
//他的关系通过front,rear来维护//按照直观的建立,我们首先想到的是层次法
//我们根据层次,来逐一将二叉树建立
//输入的数组是按照完全二叉树的编号规则设立,即
//数组角标反映了节点位置关系(存联系)
//逐个扫描数组,直到所有的节点都存取完毕之后,就结束
//约定,0表示数组当前元素为空,最后一个节点标志是-999
BitTree* CreateBinTree(int arr[]) {int i = 1;//只要我们没有扫描完元素,那么这个二叉链表就没有完成//只要扫描,我们就malloc一个节点,然后把这个节点存入left域或者right域int front = 1, rear = 0;BitTree* root = NULL;BitTree* s;//暂存节点while (arr[i]!=-999) {s = NULL;if (arr[i] != 0) {//意味着这个不是空节点,那么我们就要分配空间s = (BitTree*)malloc(sizeof(BitTree));s->data = arr[i];//存数值s->left = NULL;s->right = NULL;}//要让我们新节点入队,进入缓存,等待分配双亲的left域和right域Q[++rear] = s;if (rear == 1){root = s;}else {if (s != NULL && Q[front]) {if (rear % 2 == 0) {Q[front]->left = s;}else {Q[front]->right = s;}}if (rear % 2 == 1)front++;}i++;}return root;
}//树遍历问题:非线性结构的输出问题:前序,中序,后序
void inorder(BitTree *t) {if (t) {inorder(t->left);printf("%d ", t->data);inorder(t->right);}
}void preorder(BitTree* t) {if (t) {//根左右printf("%d ", t->data);preorder(t->left);preorder(t->right);}
}void postorder(BitTree* t) {if (t) {//左右根postorder(t->left);postorder(t->right);printf("%d ", t->data);}
}int main(void) {int arr[17] = {0,6,3,8,2,5,7,9,0,0,4,0,0,0,0,10,-999};BitTree *root = CreateBinTree(arr);inorder(root);getchar();return 0;
}

二叉排序树的查找

二叉排序树的插入


二叉排序树的删除

二叉排序树的存储结构和增删查改相关推荐

  1. 安卓后端mysql_后端Spring Boot+前端Android交互+MySQL增删查改(Java+Kotlin实现)

    1 前言&概述 这篇文章是基于这篇文章的更新,主要是更新了一些技术栈以及开发工具的版本,还有修复了一些Bug. 本文是SpringBoot+Android+MySQL的增删查改的简单实现,用到 ...

  2. C++实现静态顺序表的增删查改以及初始化

    C++实现静态顺序表的增删查改 顺序表:用一段地址连续的存储单元依s次存储数据元素的线性结构,是线性表的一种. //SeqList.h#pragma once#include <assert.h ...

  3. 【顺序表和链表】实现增删查改数据结构 OJ题编程

    目录 线性表 一.顺序表 1.使用顺序表MyArrayList增删查改 MyArrayList.java TestDemo.java 二.链表 1.带头 / 不带头 循环 / 非循环 2.创建链表并访 ...

  4. 数据库的增删查改(全部重点知识一篇整合,包括数据库查询的进阶内容)

    目录 一.新增数据 (1)单行数据全列输入 (2)指定列插入 (3)多行插入 二.简单查询数据 (1)全列查询 (2)指定列查询 (3)查询的字段是表达式 (4)去重操作distinct (5)排序操 ...

  5. MySQL第二讲 - 数据表简单操作 与 “增删查改的开头部分- 增”- 细节狂魔

    文章目录 前文知识点回顾   SQL语句 >>操作指令 (不区分大小写) 1.显示数据库:show databases; 2.创建数据库:create database 数据库名; [如果 ...

  6. 【MySQL】数据库中表的增删查改操作详解

    文章目录 前言 SQL的通用语法 一.表的创建与表的新增 语法 数据类型的介绍 演示 二.表的删除 语法 删整张表的语法 删记录的语法 演示 三.表的查询 查询整张表 (一)全列查询 (二)指定列查询 ...

  7. 【TcaplusDB知识库】GO快速上手PB表的增删查改操作

    PROTOBUF说明 PROTO表是基于PROTOBUF协议设计的TcaplusDB表,PROTOBUF协议是Google开源的通用RPC通信协议,用于TcaplusDB存储数据的序列化.反序列化等操 ...

  8. 【数据结构】链表:带头双向循环链表的增删查改

    本篇要分享的内容是带头双向链表,以下为本片目录 目录 一.链表的所有结构 二.带头双向链表 2.1尾部插入 2.2哨兵位的初始化 2.3头部插入 2.4 打印链表 2.5尾部删除 2.6头部删除 2. ...

  9. 数据结构篇 --- 带头双向循环链表增删查改

    简述:有了前篇单链表的增删查改的基础 也是出于带头双向循环链表本身的优势  双链表的增删就变得格外简单.让我们一起来体验一下. 目录 带头双向循环链表图解: 带头双向循环链表基本结构: 带头双向循环链 ...

最新文章

  1. 16汇编 and和or实现大小写转换
  2. php 登录记住密码,php 记住密码自动登录
  3. python 将一个字符list的列表扁平化成了一个list
  4. java 匿名类型_Java之匿名类讲解
  5. 【LeetCode】【字符串】题号:*537. 复数乘法
  6. Sharepoint SSL(Https)
  7. 一个机器人位于一个 m x n 网格的左上角,机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。问总共有多少条不同的路?
  8. 聊聊 Xcode 编译 ToolChain
  9. html双人对战源码,双人对战五子棋游戏 综合运用HTML、CSS、JavaScript实现
  10. 基于“点云智绘”与无人机激光雷达点云的土地整理解决方案及案例分享
  11. 计算机个人市场调查实验报告,市场调查实验报告(一)
  12. 生成自定义文字的二维码
  13. FF7 中的最大伤害分析
  14. 基于STM32设计的遥控小车(手机APP+GPS+温湿度+ESP8266)
  15. mysql修改字段设置_在mysql中,如何改变列声明.
  16. 华为5面,测试岗报价12k,面试官说我不尊重华为,他们没有那么低的薪资?
  17. 因式分解结合最近邻:多层面的协同过滤模型
  18. 完数{一个数如果等于它的因子之和,这个数就称为完数(因子:除去这个数本身正的约数)}
  19. 2019年50家最有可能成为独角兽的初创公司
  20. 3dMax中如何设置指定渲染器?

热门文章

  1. java treeset 删除_删除Java TreeSet中的最高元素
  2. 专用计算机教室设备,计算机教室专用规章制度
  3. LeetCode 7. 整数反转 Reverse Integer 官网答案的条件判定的一点思考
  4. (二)pycharm上创建虚拟环境--virtualenv
  5. 读取jar包资源代码赏析
  6. 服务器模型——从单线程阻塞到多线程非阻塞(下)
  7. Sping WebSocket SockJS使用
  8. EBS Form中数据提交方式(COMMIT)
  9. 关于开源网管软件选型的几点思考
  10. OpenCV for Ios 学习笔记(4)-标记检测1