数据结构--二叉树的二叉链表实现

2023-11-19

1 二叉树的二叉链表示意图

  二叉链表的每个结点由三个域组成:数据域,左指针域和右指针域。左右指针分别用来保存左右孩子结点的存储地址。
在这里插入图片描述

2 二叉链表实现二叉树

2.1 头文件及其定义

  • BTNode.h
#pragma once
typedef char BTDataType;
typedef struct BinaryTreeNode {
   
	BTDataType data;
	struct BinaryTreeNode* left;
	struct BinaryTreeNode* right;
}BTNode;

// 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树
BTNode* BinaryTreeCreate(BTDataType* a, int n, int* pi);
// 二叉树销毁
void BinaryTreeDestory(BTNode** root);
// 二叉树节点个数
int BinaryTreeSize(BTNode* root);
// 二叉树叶子节点个数
int BinaryTreeLeafSize(BTNode* root);
// 二叉树第k层节点个数
int BinaryTreeLevelKSize(BTNode* root, int k);
// 二叉树查找值为x的节点
BTNode* BinaryTreeFind(BTNode* root, BTDataType x);
// 二叉树前序遍历
void BinaryTreePrevOrder(BTNode* root);
// 二叉树中序遍历
void BinaryTreeInOrder(BTNode* root);
// 二叉树后序遍历
void BinaryTreePostOrder(BTNode* root);
// 层序遍历
void BinaryTreeLevelOrder(BTNode* root);
// 判断二叉树是否是完全二叉树
int BinaryTreeComplete(BTNode* root);
  • queue.h(队列的实现见附录)
#pragma once
#include"BTNode.h"

//队列的单向无头非循环链表的实现
typedef BTNode* QDataType;
typedef struct QNode {
   
	QDataType data;
	struct QNode* next;
} QNode;  //队列中的链表节点

typedef struct Queue {
   
	QNode* front;  //指向队头
	QNode* rear;  //指向队尾
}Queue;

void queueInit(Queue* q);
QNode* creatNode(QDataType data);
void queuePush(Queue* q, QDataType data);
void queuePop(Queue* q);
QDataType queueFront(Queue* q);
QDataType queueBack(Queue* q);
int queueSize(Queue* q);
int queueEmpty(Queue* q);
void queueDestroy(Queue* q);
  • BTNode.c
#include<stdio.h>
#include<stdlib.h>
#include"queue.h"
#include"BTNode.h"

2.2 根据前序遍历的数组创建二叉树

// 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树
BTNode* binaryTreeCreate(BTDataType arr[], int n, int* idx) {
   
	// 递归停止条件
	if (*idx >= n || arr[*idx] == '#') {
   
		
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构--二叉树的二叉链表实现 的相关文章

  • C++ Pat甲级1011 World Cup Betting (20 分)

    1011 World Cup Betting 20 分 With the 2010 FIFA World Cup running football fans the world over were becoming increasingly
  • 常见的常微分方程的一般解法

    本文归纳常见的常微分方程的一般解法 如果没有出现意外 本文将不包含解法的推导过程 常微分方程 我们一般可以将其归纳为如下n类 可分离变量的微分方程 一阶 一阶齐次 非齐次 线性微分方程 一阶 包含伯努利 二阶常系数微分方程 二阶 高阶常系数
  • kafka如何保证数据可靠性和数据一致性

    数据可靠性 Kafka 作为一个商业级消息中间件 消息可靠性的重要性可想而知 本文从 Producter 往 Broker 发送消息 Topic 分区副本以及 Leader 选举几个角度介绍数据的可靠性 Producer 往 Broker

随机推荐

  • SIFT和SURF的替换算法——ORB (Oriented FAST and Rotated BRIEF 快速定向和旋转)

    SIFT和SURF的替代算法 ORB Oriented FAST and Rotated BRIEF 快速定向和旋转 1 效果图 2 源码 参考 1 用于关键点检测和描述的SIFT Scale Invariant Feature Trans
  • Faster R-CNN系列之MATLAB篇

    我发现 我是个懒人 不对 我一直是个懒人 但是 电光火石间 不知怎么地 我决定 我写个博客吧 我是废话的分割线 最开始接触Faster R CNN 先尝试跑的其实是PYTHON版 但是编译过程中出错了 我又从来没接触过python 自己稍稍
  • 【INS-30014】无法检查指定的位置是否位于CFS上的解决办法

    安装oracle数据库过程中 出现 INS 30014 无法检查指定的位置是否位于CFS上的解决办法如下 安装过程中 选择 仅安装数据库软件 在安装成功后 使用DBCA工具创建以及配置数据库即可
  • Oracle:数据库设计三大范式

    数据库设计三大范式 为什么要谈及范式 这也是为了数据库设计做准备 对于表设计而言 我们需求何种程度的设计 这完全取决你数据的规模 好比你建房子 要是建个一两层 基本上不需要什么设计 直接开工就行 要是建个这样的房子还找设计公司的话 这无疑是
  • 安装win7后怎么装linux系统,小编教你如何使用u盘安装Linux系统

    第二步 u盘安装Linux 1 U盘插到要安装Linux的电脑上后 启动电脑 在启动时 一直按F2键 就能进入到主板的BIOS控制界面 按左右键移动到boot选项 然后按上下键到removeable device选项 再按 号移动它的位置在
  • flutter城市选择页面

    import dart convert import package test http DioManager dart import package test http api life api dart import package t
  • [分布式] zookeeper集群与kafka集群

    目录 一 Zookeeper 概述 1 1 Zookeeper定义 1 2 Zookeeper 工作机制 1 3 Zookeeper 特点 1 4 Zookeeper 数据结构 1 5 Zookeeper 应用场景 1 6 Zookeepe
  • 小程序跳转小程序

    小程序如何跳转到其他小程序 微信小程序跳转到其他小程序有两种方式 一种是用组件navigator跳转
  • python简单的预测模型_如何使用 Python 或 matlab 实现一个简单根据年份预测年龄的模型...

    Escapist367 110 天前 import torch inputs outputs for year1 in range 1900 2020 for year2 in range 1900 2020 for age1 in ran
  • OD机试题目【计算网络信号】

    网络信号经过传递会逐层衰减 且遇到阻隔物无法直接穿透 在此情况下需要计算某个位置的网络信号值 注意 网络信号可以绕过阻隔物 array m n 的二维数组代表网格地图 array i j 0代表i行j列是空旷位置 array i j x x
  • devops理念

    一 开发模式 传统开发模式 也就是瀑布型开发 瀑布模型式是最典型的预见性的方法 严格遵循预先计划的需求 分析 设计 编码 测试的步骤顺序进行 例如需求规格 设计文档 测试计划和代码审阅等等 其中需求分析占比很重 对客户想要的产品进行详细分析
  • android jni 报错 libjnidispatch.so 找不到

    Caused by java lang UnsatisfiedLinkError Native library com sun jna android arm libjnidispatch so not found in resource
  • ffmpeg by id和by name查找decoder的区别

    转自 https blog csdn net muyuyuzhong article details 79735763 同一个 AVCodecID 可能对应多个不同的编解码器 AVCodec 他们有不同的 AVCodec name avco
  • 一张图深度解析Linux共享内存的内核实现

    一张图深度解析Linux共享内存的内核实现 Sailor forever sailing 9806 163 com http blog csdn net sailor 8318 article details 39484747 PDF版本下
  • ThreadLocal学习

    1 threadLocal图解 java lang ThreadLocal类实现了线程的本地存储 ThreadLocal的内部实现 ThreadLocal的内部实现包括一个类似HashMap的对象 这里称之ThreadLocalMap Th
  • 华为OD机试 - 表达式括号匹配(Java)

    题目描述 1 2 3 3 8 0 1 2 这是一个简单的数学表达式 今天不是计算它的值 而是比较它的括号匹配是否正确 前面这个式子可以简化为 这样的括号我们认为它是匹配正确的 而 这样的我们就说他是错误的 注意括号里面的表达式可能是错的 也
  • rhel的一些配置

    ip etc sysconfig network scripts ifcfg eth0 DEVICE eth0 NM CONTROLLED yes ONBOOT yes BOOTPROTO dhcp BOOTPROTO static IPA
  • 消息转换器统一对null值处理

    import java nio charset Charset import java util ArrayList import java util List import org springframework context anno
  • STM32 CAN通信理解(是半双工还是全双工?)

    STM32F429 CAN通信 CAN 是控制器局域网络 Controller Area Network 的简称 它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的 并最终成为国际标准 ISO11519 是国际上应用最广泛的现场
  • 数据结构--二叉树的二叉链表实现

    1 二叉树的二叉链表示意图 二叉链表的每个结点由三个域组成 数据域 左指针域和右指针域 左右指针分别用来保存左右孩子结点的存储地址 2 二叉链表实现二叉树 2 1 头文件及其定义 BTNode h pragma once typedef c