数据结构-二叉树-链式

一、链式二叉树的结构

typedef int BTNodeDataType;
typedef struct BTNode
{BTNodeDataType data;struct BTNode* left;struct BTNode* right;
}BTNode;

二叉树的前中后序遍历

前序:根左右

中序:左根右

后序:左右根

void PreOrder(BTNode* root)
{if (root == NULL){return;}printf("%d", root->data);PreOrder(root->left);PreOrder(root->right);
}void InOrder(BTNode* root)
{if (root == NULL){return;}InOrder(root->left);printf("%d", root->data);InOrder(root->right);
}void PostOrder(BTNode* root)
{if (root == NULL){return;}PostOrder(root->left);PostOrder(root->right);printf("%d", root->data);
}

递归展开图

前序遍历

左右子树的递归使用同一块栈帧。因为在调用右子树的递归之前,左子树的栈帧就已经还给操作系统了。

中序遍历

二、分治

首先我们可以使用分治的思想来思考一个问题,二叉树的节点个数怎么求。我们可以这样思考,先求出左右子树的节点个数,然后返回左右子树节点的数量+根的数量。其实这就是一个分治的思想。

int TreeSize(BTNode* root)
{if (root == NULL){return 0;}int leftsize = TreeSize(root->left);int rightsize = TreeSize(root->right);return leftsize + rightsize + 1;
}

我们可以再来举一个例子来思考这个问题,学校的管理制度

比如校长要统计人数,我们就可以把任务分发给院长,然后院长在找到系主任,系主任找到班长,班长找舍长,最后由舍长上报人数。班长开始上报给系主任,系主任报给院长,院长报给校长。这就是分治的思想。

求树的高度,也可以应用分治的思想。

int TreeHeight(BTNode* root)
{if (root == NULL){return 0;}int left = TreeHeight(root->left);int right = TreeHeight(root->right);return left > right ? left + 1 : right + 1;
}

不可以这样写,这个写法相当于上面的班长,系主任,院长,校长都是只有七秒记忆的人,导致舍长要报好多遍。

会造成栈溢出的结果。

求第K层的节点个数

根的第k层 = 左子树的第k-1层个数 + 右子树的第k-1层个数。

int TreeKLevel(BTNode* root, int k)
{if (root == NULL){return 0;}if (k == 1){return 1;}int left = TreeKLevel(root->left, k - 1);int right = TreeKLevel(root->right, k - 1);return left + right;
}

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

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

相关文章

spring boot3单模块项目工程搭建-上(个人开发模板)

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 目录 写在前面 上文衔接 常规目录创建 common目录 exception.handle目录 result.handle目录 controller目录 service目录 mapper目录 entity目录 test目录 写在最后 写在前面 本文…

uniapp视频播放器(h5+app)

关于uniapp视频播放器遇到的一些问题,mark下。 中途遇到了很多问题,如果有相同的伙伴遇到了类似的,欢迎交流 官方的video播放器在app上不友好,有以下功能不支持。 loadedmetadata、controlstoggle不支持导致只能手写控制层。 不…

Linux实验一:Linux环境及编程工具

目录 一、实验目的二、实验内容三、参考代码四、实验步骤步骤1. 编辑源代码test1.c步骤2. 编译源代码test1.c步骤3. 调试test1步骤4. 重新编译运行test1.c 五、实验结果六、实验总结 一、实验目的 1、掌握Linux C开发过程中的基本概念; 2、掌握如vim,GC…

keepalived检测Nginx高可用

node1 192.168.136.55 node2 192.168.136.56 两台机器都安装dnf install keepalived nginx [rootnode1 ~]# echo "web test page, ip is hostname -I." > /usr/share/nginx/html/index.html [rootnode2 ~]# echo "web test page, ip is hostname -I."…

【科学研究】农村出身:一种复杂的情感结构

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验,帮助大家尽早适应研究生生活,尽快了解科研的本质。祝一切顺利!—…

LeetCode 面试题 17.08 —— 马戏团人塔

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 首先,我们对人的身高按照从小到大排序,特别注意,对于身高相等的人,要按照体重从高到低排序。这时候,序列已经满足了在上面的人要比下面的人矮一点&#…

在开发软件以便未来本地化到其他语言时需要考虑的事项

我们准备了一份关于开发软件以便未来本地化到其他语言时需要考虑的事项的简要指南。这非常重要,因为您的软件在其他国家市场上的销售可能会带来比本国市场更多的收入。 在开发软件时考虑到未来本地化到其他语言的一些重要方面包括: 设计多语言支持&…

有什么因素会影响IP稳定性?

IP稳定性指的是IP地址在一段时间内保持不变的能力,对于网络连接的安全性和可靠性至关重要。以下是一些可能影响IP稳定性的主要因素: 网络服务提供商(ISP)的政策:不同的ISP对于IP地址的管理和使用有不同的政策。一些IS…

springboot+thymeleaf实现一个简单的监听在线人数功能

功能步骤: 1. 当用户访问登录页面时,Logincontroller的showLoginForm方法被调用,返回登录页面的视图名字。 2. 用户提交表单,调用LoginController的login方法。 3.login方法 4.登录验证通过,home方法会被调用&#xf…

C++解方程组的库

解决多元多次方程组的问题,你可以考虑以下几个C库: Eigen: Eigen库是一个高性能的C模板库,用于线性代数运算。它提供了强大的矩阵运算功能,可以用来解多元一次方程组。对于多次方程组,你可能需要结合Eigen和一些数值优…

C++笔试强训day7

目录 1.字符串中找出连续最长的数字串 2.岛屿数量 3.拼三角 1.字符串中找出连续最长的数字串 链接 我的思路很简洁,就是双指针遍历,然后不断更新左位置left和右位置right和长度len。 然后我写代码的时候代码思路没跟上原本思路,直接把所有…

HTTP网络协议,接口请求的内容类型 content-type(2024-04-27)

1、简介 Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP 网页点击的结果却是下载…

OSI七层模型、TCP/IP五层模型理解(个人解读,如何理解网络模型)

OSI七层模型 七层模型,亦称OSI(Open System Interconnection)。参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为OSI参考模型或七层模型。它是一个七层的、抽象的模…

航片卫星影像局部几何纠偏-道路错位校正

原图道路错位如下图所示: 局部几何纠偏结果如下图所示: 操作视频教程: MCM智拼图软件V8.5-局部位置纠偏-几何校正-PS联动_哔哩哔哩_bilibili

11 c++版本的贪吃蛇

前言 呵呵 这大概是 大学里面的 c 贪吃蛇了吧 有一些 面向对象的理解, 但是不多 最近 因为想要 在单片机上面移植一下 贪吃蛇, 所以 重新拿出了一下 这份代码 然后 将它更新为 c 版本, 还是 用了一些时间 这里 具体的实现 就不赘述, 仅仅是 发一下代码 以及 具体的使用…

上位机图像处理和嵌入式模块部署(树莓派4b用skynet实现进程通信)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们说过,在工业系统上面一般都是使用多进程来代替多线程。这后面,主要的原因还是基于安全的考虑。毕竟一个系统里面&a…

北斗引路,太阳为源,定位报警,保护渔业,安全护航!

2022年1月,农业农村部发布《“十四五”全国渔业发展规划》明确提出,到2025年,渔业质量效益和竞争力明显增强,渔业基础设施和装备条件明显改善,渔业治理体系和治理能力现代化水平明显提高,实现产业更强、生态…

用Excel做一个功能完备的仓库管理系统

1 基本设计思路 用到的Excel技术:sumif, vlookup, 表格(table)。基本思路:在有基础的商品、仓库等信息的情况下,对商品的每一个操作都有对应的单据,然后再汇总统计。标识:为了在不同的维度统计数量,各单据…

HarmonyOS开发案例:【使用List组件实现设置项】

介绍 在本篇CodeLab中,我们将使用List组件、Toggle组件以及Router接口,实现一个简单的设置页,点击将跳转到对应的详细设置页面。效果图如下: 相关概念 [CustomDialog]:CustomDialog装饰器用于装饰自定义弹窗。[List]…

Linux 权限与软件包管理器 yum

一. 研究Linux默认权限 目录 ,起始权限:777 普通文件,起始权限666 Linux系统中存在权限掩码 使用umask指令也可以改变掩码 如果将掩码改为0000 我们可以看到权限发生改变(重新设置掩码) 最终权限起始权限 去掉 权限…