二叉树的性质(概念/特性/存储结构)

news2025/1/11 13:00:17

目录

  • 1 二叉树的定义及主要特性
    • 1.1 二叉树的定义
    • 1.2 特殊二叉树
      • 1.2.1 满二叉树
      • 1.2.2 完全二叉树
      • 1.2.3 二叉排序树
      • 1.2.4 平衡二叉树
    • 1.3 二叉树的性质
      • 1.3.1 非空二叉树上的叶结点数
      • 1.3.2 非空二叉树第k层结点数
      • 1.3.3 高度为h的二叉树至多结点数
      • 1.3.4 完全二叉树结点与双亲的关系
      • 1.3.5 n个结点完全二叉树的高度
  • 2 二叉树的存储结构
    • 2.1 顺序存储结构
    • 2.2 链式存储结构

1 二叉树的定义及主要特性

1.1 二叉树的定义

Alt
Alt
Alt
Alt

1.2 特殊二叉树

1.2.1 满二叉树

Alt
Alt

1.2.2 完全二叉树

Alt
Alt
其实这些结论不难理解,只要记住完全二叉树的基本性质,这些结论就可以很快理解。

1.2.3 二叉排序树

在这里插入图片描述

Alt

1.2.4 平衡二叉树

Alt
Alt
树的深度:树中结点的最大层数

1.3 二叉树的性质

1.3.1 非空二叉树上的叶结点数

在这里插入图片描述

1.3.2 非空二叉树第k层结点数

在这里插入图片描述
等比数列求和公式
S n = a 1 1 − q n 1 − q Sn=a_1 \frac{1-q^n}{1-q} Sn=a11q1qn
其中q是公比,a1是首项。

等比数列第n项:
a n = a i q n − 1 a_n=a_iq^{n-1} an=aiqn1

1.3.3 高度为h的二叉树至多结点数

在这里插入图片描述

1.3.4 完全二叉树结点与双亲的关系

在这里插入图片描述

1.3.5 n个结点完全二叉树的高度

在这里插入图片描述

2 二叉树的存储结构

2.1 顺序存储结构


在这里插入图片描述
在这里插入图片描述

2.2 链式存储结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二叉树实现链式存储参考代码:

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

// 二叉树结点
typedef struct TreeNode {
    int data;
    struct TreeNode *left;
    struct TreeNode *right;
} TreeNode;

// 创建二叉树结点
TreeNode* create_node(int data) {
    TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
    node->data = data;
    node->left = NULL;
    node->right = NULL;
    return node;
}

// 插入结点到二叉树中
void insert_node(TreeNode** root, int data) {
    if (*root == NULL) {
        *root = create_node(data);
    } else if (data < (*root)->data) {
        insert_node(&((*root)->left), data);
    } else if (data > (*root)->data) {
        insert_node(&((*root)->right), data);
    }
}

// 中序遍历二叉树
void inorder_traversal(TreeNode* root) {
    if (root != NULL) {
        inorder_traversal(root->left);
        printf("%d ", root->data);
        inorder_traversal(root->right);
    }
}

int main() {
    // 创建二叉树
    TreeNode* root = NULL;
    insert_node(&root, 5);
    insert_node(&root, 3);
    insert_node(&root, 7);
    insert_node(&root, 2);
    insert_node(&root, 4);
    insert_node(&root, 6);
    insert_node(&root, 8);

    // 输出二叉树
    printf("Inorder traversal of binary tree: ");
    inorder_traversal(root);
    printf("\n");

    return 0;
}

附赠一张壁纸(^ ^)/~
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/379931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电子价格标签-系统结构

一、V2.4基站软件电子标签 接收PC下达的操作指令&#xff0c;解析后再通过RF发送给电子标签&#xff0c;接收路由器发送的数据信息并解析&#xff0c;更新数据。 1. 2.1寸电子价签 2. 2.9寸电子价签 ​ 3. 4.2寸电子价签 ​ 4. 7.5寸电子价签 ​ 5. 10.2寸电子价签 二、V4…

当审稿人回复这些审稿意见时,其实是在暗示你这些细节需要注意

当我们翘首以盼SCI论文投稿的审稿决定时。心情往往是复杂的&#xff0c;想收到审稿决定又担心收到的是不好的审稿决定。不管审稿结论如何&#xff0c;我们首先要明白的是那几个简短字母的审稿决定对我们来说&#xff0c;意味着什么。只有这样才有可能既不妄自菲薄也不杞人忧天。…

Intel CSME 简述

SME 算是 Intel X86 PC 上最神秘的部分了,本文根据 us-19-Hasarfaty-Behind-The-Scenes-Of-Intel-Security-And-Manageability-Engine 一文写成。讲述内容无法证伪,各位随便听听即可,了解这些能够帮助BIOS 工程师更好的理解一些操作的实现。文章基于 Intel 第八代第九代CPU(…

springCloud之seata

一、Seata是什么 Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式解决方案。 官方文档 https://seata.io/zh-cn/docs/overview/wha…

发现新大陆——原来软件开发根本不需要会编码(看我10分钟应用上线)

目录 一、前言 二、官网基础功能及搭建 三、体验过程 01、连接数据源 02、设计表单 03、流程设计 04、图表呈现 05、组织架构设置 五、效率评价 六、小结 一、前言 众所周知&#xff0c;每家公司在发展过程中都需要构建大量的内部系统&#xff0c; 如运营使用的用户…

数据结构与算法基础-学习-14-线性表之串

一、串的定义由0-n个字符组成的有限序列。&#xff08;n>0&#xff09;二、串的相关术语1、子串串中任意个连续字符组成的子序列成为该串的子串。2、主串包含子串的串成为主串。3、字符位置字符在序列中的序号为该字符在串中的位置。4、子串位置子串第一个字符在主串中的位置…

Docker----------Docker轻量级可视化工具Portainer/监控之 CAdvisor+InfluxDB+Granfana

1.是什么 Portainer 是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便地管理Docker环境&#xff0c;包括单机环境和集群环境。 2 官网 官网 https://www.portainer.io/ https://docs.portainer.io/v/ce-2.9/start/install/server/docker/linux 3.…

【数电基础】——时序逻辑电路

目录 1.大纲 2.时序逻辑电路的特点 3.时序逻辑电路的一般形式 4.时序逻辑电路的描述方法 5.同步时序逻辑电路 6.异步时序逻辑电路 7.同步时序逻辑电路的分析方法&#xff08;上升沿触发的D触发器&#xff09; 8.同步时序逻辑电路的分析方法&#xff08;脉冲触发的JK触发…

Grafana邮件及告警配置

之前部署过服务器的监控组件程序&#xff0c;本在部署时也进行邮件及告警配置&#xff0c;但未进行文档整理&#xff0c;在这儿进行展示。之前用过Grafana的7.*的版本&#xff0c;在进行邮件配置还比较OK&#xff0c;但在配置告警时&#xff0c;太繁琐&#xff0c;还要自己去写…

Java数据结构LinkedList单链表和双链表模拟实现及相关OJ题秒AC总结知识点

本篇文章主要讲述LinkedList链表中从初识到深入相关总结&#xff0c;常见OJ题秒AC&#xff0c;望各位大佬喜欢 一、单链表 1.1链表的概念及结构 1.2无头单向非循环链表模拟实现 1.3测试模拟代码 1.4链表相关面试OJ题 1.4.1 删除链表中等于给定值 val 的所有节点 1.4.2 反转…

【H2实践】之认识 H2

一、H2 官网 H2 官网 http://www.h2database.com/html/main.html H2 是一款短小精干的 Java 内存数据库,性能强劲。 H2 的优点&#xff1a; 非常快的数据库引擎开源Java 编写支持标准 SQL, JDBC API内嵌和服务器模式&#xff0c;支持集群强大的安全特性可使用 PostgreSQL OD…

如何实现云原生?推荐的几个实用工具

云原生是一种软件开发和部署的方法&#xff0c;它依赖于容器、微服务和自动化运维。它能使应用更高效、可靠和可扩展&#xff0c;并适用于不同的云平台。 如果要更直接、更通俗地解释上述概念的话。 云的本源更准确地说是一种文化&#xff0c;一种潮流&#xff0c;它必然是云…

更新 Python 100道基础入门检测练习题【下篇】(附答案)

前言 大家早好、午好、晚好吖 ❤ ~ 爆肝更新 Python 100道基础入门练习题【篇上】 更多精彩内容、资源皆可点击文章下方名片获取此处跳转 实例021&#xff1a;猴子偷桃 题目&#xff1a; 猴子吃桃问题&#xff1a;猴子第一天摘下若干个桃子&#xff0c;当即吃了一半&#xf…

微服务一 实用篇 - 1. SpringCloud01

《微服务一 实用篇 - 1. SpringCloud01》 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! 《微服务一 实用篇 - 1. SpringCloud01》《微服务一 实用篇 - 1. SpringCloud01》0. 微服务课程简介1.认识微服务1.0.学习目标1.1.单体架构1.2.分布式架构1.3.微服务…

1000亿数据、30W级qps如何架构?来一个天花板案例

1000亿级存储、30W级qps系统如何架构&#xff1f;来一个天花板案例 说在前面 在尼恩的&#xff08;50&#xff09;读者社群中&#xff0c;经常遇到一个 非常、非常高频的一个架构面试题&#xff0c;类似如下&#xff1a; 千万级数据&#xff0c;如何做系统架构&#xff1f;亿…

外网跨网远程控制内网计算机3种方案

远程控制&#xff0c;通俗来讲就是在自己个人电脑直接远程访问另台主机电脑桌面操作。 如何远程控制电脑&#xff1f;远程控制别人计算机的方案通常有两种&#xff0c;一种是开启电脑系统自带的远程桌面功能&#xff0c;如果涉及跨网内、外网互通可以同时用快解析内网映射外网&…

windows 下 安裝mysql 5.7.41 (64位) 超简单方式

文章目录1. 安装包下载2.安装步骤3. 服务卸载方式4. 配上 my.ini 常用配置1. 安装包下载 注意&#xff0c;截至2023年2月23日&#xff0c;MySQL所有版本不提供ARM芯片架构的Windows版本(8.0.12开始支持Red Hat系统的ARM版本)&#xff0c;所以ARM架构的Windows无法安装MySQL&am…

如何批量重命名,把文件(夹)名的内容位置调整(前后移动)

首先&#xff0c;需要用到的这个工具&#xff1a; 百度 密码&#xff1a;qwu2 蓝奏云 密码&#xff1a;2r1z 情况是这样&#xff0c;把“中文[数字]”的名称&#xff0c;改为"中文 - 数字" 打开工具&#xff0c;切换到 文件批量复制 模块&#xff0c;快捷键Ctrl5 …

【同步工具类:CountDownLatch】

同步工具类:CountDownLatch介绍源码分析继承图核心方法分析await()countDown()业务场景代码实现测试结果总结介绍 Jdk原文翻译 CountDownLatch 一种同步辅助工具&#xff0c;允许一个或多个线程等待&#xff0c;直到在其他线程中执行的一组操作完成。 CountDownLatch用给定的计…

css3的重点内容

css3的重点内容 浮动 父级边框塌陷问题 浮动的清除 clear:left; //清除左侧浮动 clear:right; //清除右侧浮动 clear:both; //清除两侧浮动解决方案 增加父级元素的高度增加一个空的div&#xff0c;之后清除浮动通过overflow来进行相关元素的修剪给父类添加相应的伪类元素…