数据结构-二叉树-链式

news2024/11/17 1:47:36

一、链式二叉树的结构

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.coloradmin.cn/o/1621656.html

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

相关文章

大语言模型Ollama

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl Ollama简介 Ollama是一个开源的大语言模型平台,它允许用户在本地环境中运行、创建和共享大型语言模型。Ollama提供了丰富的功能和特性,使得用户可以…

Jenkins - macOS 上安装

文章目录 关于 JenkinsmacOS 上安装 Jenkins方式一:brew方式二:tomcat Jenkins war 关于 Jenkins 官网上下载Jenkins并将其安装到持续集成服务器 https://jenkins.io/download/ macOS 上安装 Jenkins 现在本 macOS 上测试 https://www.jenkins.io/do…

更新至2022年上市公司数字化转型数据合集(四份数据合集)

更新至2022年上市公司数字化转型数据合集(四份数据合集) 一、2000-2022年上市公司数字化转型数据(年报词频、文本统计) 二、2007-2022年上市公司数字化转型数据(年报和管理层讨论)(含原始数据…

Golang基础4-type、go测试

type相关 别名:本质上是更好的理解代码,比如byte(uint8)、rune(int32) 定义新类型,那么就相当于时struct了 package mainimport ("fmt""strconv" )// XInt 别名,在编译的时候会直接替换int type XInt int// YInt 自定…

线性代数基础1向量

1、向量是什么 1.1、向量的定义 在数学中,向量(也称为欧几里得向量、几何向量、矢量),指具有大小和方向的量。它可以形象化地表示为带箭头的线段。箭头所指:代表向量的方向;线段长度:代表向量的…

W801学习笔记十四:掌机系统——菜单——尝试打造自己的UI

未来将会有诸多应用,这些应用将通过菜单进行有序组织和管理。因此,我们需要率先打造好菜单。 LCD 驱动通常是直接写屏的,虽然速度较快,但用于界面制作则不太适宜。所以,最好能拥有一套 UI 框架。如前所述,…

面试二十一、红黑树

性质: 插入: 旋转:

Git之merge与rebase操作命令及问题

背景:之前一直使用的是 merge 来实现两分支的合并代码操作,遇到冲突,解决完冲突从头 add 、commit 、push 再次操作一遍提交操作就没啥事了。但后来的大型项目是 多人协同开发,前端带头人提议倡导使用 rebase 来合并分支&#xff…

【MySQL】libmysqlclient-dev安装失败

报错内容如下: 下列软件包有未满足的依赖关系: libmysqlclient-dev : 依赖: libssl-dev 但是它将不会被安装 依赖: zlib1g-dev 但是它将不会被安装 E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关…

FRPC+PHP+MYSQL+APACHE2=个人网站

应用背景有公网需求,但是又不想去买又贵又低配置的服务器,然后方案就应运而生 frp/README_zh.md at dev fatedier/frp (github.com) 在这里, FRPC作为内网穿透服务, PHPMYSQLAPACHE2,作为网站搭建,具体细节不细讲, 但是在我的/var/www/html下面 linaroHinlink:/var/www/h…

flutter ios Firebase 消息通知错误 I-COR000005,I-FCM001000 解决

*前提是已经 使用firebase-tools 已经给 Flutter 加入了 消息通知相关配置。教程>> 一、I-COR000005 10.22.0 - [FirebaseCore][I-COR000005] No app has been configured yet. import Firebase....FirebaseApp.configure() 10.22.0 - [FirebaseMessaging][I-FCM001000…

Golang | Leetcode Golang题解之第48题旋转图像

题目&#xff1a; 题解&#xff1a; func rotate(matrix [][]int) {n : len(matrix)// 水平翻转for i : 0; i < n/2; i {matrix[i], matrix[n-1-i] matrix[n-1-i], matrix[i]}// 主对角线翻转for i : 0; i < n; i {for j : 0; j < i; j {matrix[i][j], matrix[j][i]…

Android某钉数据库的解密分析

声明 1 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 目的 1 解密app数据库&#xff0c;用数据库软件打开查看信息内容 入手…

探索人工智能的边界:GPT 4.0与文心一言 4.0免费使用体验全揭秘!

探索人工智能的边界&#xff1a;GPT与文心一言免费试用体验全揭秘&#xff01; 前言免费使用文心一言4.0的方法官方入口进入存在的问题免费使用文心一言4.0的方法 免费使用GPT4.0的方法官方入口进入存在的问题免费使用GPT4.0的方法 前言 未来已来&#xff0c;人工智能已经可以…

前端css中keyframes(关键帧)的简单使用

前端css中keyframes的使用 一、前言二、例子&#xff08;一&#xff09;、例子源码1&#xff08;二&#xff09;、源码1运行效果1.视频效果2.截图效果 三、结语四、定位日期 一、前言 关键帧keyframes是css动画的一种&#xff0c;主要用于定义动画过程中某一阶段的样式变化&am…

[2021年最新]国产时序性数据TDenige入门

一、TDenige简介 TDengine&#xff1a;是涛思数据面对高速增长的物联网大数据市场和技术挑战推出的创新性的大数据处理产品&#xff0c;它不依赖任何第三方软件&#xff0c;也不是优化或包装了一个开源的数据库或流式计算产品&#xff0c;而是在吸取众多传统关系型数据库、NoS…

Prompt-to-Prompt Image Editing with Cross Attention Control

Prompt-to-Prompt Image Editing with Cross Attention Control TL; DR&#xff1a;prompt2prompt 提出通过替换 UNet 中的交叉注意力图&#xff0c;在图像编辑过程中根据新的 prompt 语义生图的同时&#xff0c;保持图像整体布局结构不变。从而实现了基于纯文本&#xff08;不…

Checkpoint机制和生产配置

1.前提 在将Checkpoint之前&#xff0c;先回顾一下flink处理数据的流程&#xff1a; 2. 概述 Checkpoint机制&#xff0c;又叫容错机制&#xff0c;可以保证流式任务中&#xff0c;不会因为异常时等原因&#xff0c;造成任务异常退出。可以保证任务正常运行。 &#xff08;1&…

【iCloud】土耳其苹果礼品卡购买

礼品购买官网 注册账号后&#xff0c;点击苹果礼品卡&#xff0c;选择自己想要的一款加购 没有国外的卡&#xff0c;只能选这种方式付款&#xff0c;使用银联卡&#xff1a; 接着填入银行卡信息付款即可。

Xbox VR头盔即将推出,但它是Meta Quest的‘限量版’。

&#x1f4f3;Xbox VR头盔即将推出&#xff0c;但它是Meta Quest的‘限量版’。 微软与Meta合作推出限量版Meta Quest VR头映射Xbox风格&#xff0c;可能是Meta Quest 3或未来版本的特别定制版&#xff0c;附带Xbox控制器。这一合作是Meta向第三方硬件制造商开放其Quest VR头盔…