二叉树的三种遍历
二叉树的遍历可以有:先序遍历、中序遍历、后序遍历
先序遍历:根、左子树,右子树
中序遍历:左子树、根、右子树
后序遍历:左子树、右子树、根
下面是我画图理解三种遍历:
二叉树里都是分为左子树和右子树。分治思想:1 将任务分给2 和 4 ,2又分给 3 和NULL,3又分给 NULL NULL 同样:4将任务分给 5 和6 ,5又分给NULL NULL ,6也是分给NULL NULL;

以上就是二叉树的三种遍历方法
void PrevOrder(BTNode* root)//先序遍历
{if(root->data == NULL){printf("NULL");return;}printf("%d",root->data);PrevOrder(root->left);//不为空,就分为左子树和右子树PrevOrder(root->right);//
}下面是我画的递归图:

二、下面是实现二叉树的一些计算:
先手动创建和连接结点,使他成为二叉树。然后用代码实现,先序遍历、中序遍历、后序遍历。
typedef int BTDateType;
typedef struct BinaryTreeNode
{BTDateType data;struct BinaryTreeNode* left;struct BinaryTreeNode* right;
}BTNode;BTNode* BuyBTNode(BTDateType data)
{BTNode* node = (BTNode*)malloc(sizeof(BTNode));if (node == NULL){perror("malloc error");return;}node->data = data;node->left = node->right = NULL;return node;
}这是随便手动连接的结点,以便于我们测试
接着我们可以写遍历顺序
//先序遍历
void PrevOder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}printf("%d ", root->data);PrevOder(root->left);PrevOder(root->right);
}//中序遍历
void InOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}InOrder(root->left);printf("%d ", root->data);InOrder(root->right);
}//后序遍历
void PastOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}PastOrder(root->left);PastOrder(root->right);printf("%d ", root->data);
}
从上可以看出,结果和我们上面自己写的一样;
我们将遍历函数写完后,接着就算结点的数目:
//求结点数目
int TreeSize1(BTNode* root)
{if (root == NULL){return 0;}size++;//全局变量TreeSize1(root->left);TreeSize1(root->right);
}
//求节点数目
int TreeSize2(BTNode* root)
{return root == NULL ? 0 :TreeSize2(root->left) + TreeSize2(root->right) + 1;//+1是加根节点自己
}求结点数,也是分治思想:
从根结点开始,最后结点需要汇总到根节点。要想知道,自己结点下还有多少结点,可以向自己的孩子得到;

三、求二叉树的高度/深度
我以空树的高度为0;
同样是分治思想:
//int TreeHeight(BTNode* root)
//{
// if (root == NULL)
// {
// return 0;
// }
// //这一种会造成很大的资源浪费
// return TreeHeight(root->left) > TreeHeight(root->right) ? TreeHeight(root->left)+1 :
// TreeHeight(root->right)+1;
//}int TreeHeight(BTNode* root)
{if (root == NULL){return 0;}int leftHeight = TreeHeight(root->left); int rightHeight = TreeHeight(root->right);return leftHeight > rightHeight ? leftHeight + 1 :rightHeight + 1;
}二叉树的深度大概就是这样
相关文章:
二叉树的三种遍历
二叉树的遍历可以有:先序遍历、中序遍历、后序遍历先序遍历:根、左子树,右子树中序遍历:左子树、根、右子树后序遍历:左子树、右子树、根下面是我画图理解三种遍历:二叉树里都是分为左子树和右子树。分治思…...
我,30岁程序员被裁了,千万别干全栈
大家好,这里是程序员晚枫,今天是读者投稿。下面开始我们的正文。👇 关注博主👉程序员晚枫 很久了,今天给大家分享一下我从事程序员后,30岁被裁的经历,希望帮到有需要的人。 1、我被裁了 大家好…...
【linux】:进程地址空间
文章目录 前言一、进程地址空间总结前言 本篇文章接着上一篇文章继续讲解进程,主要讲述了进程在运行过程中是如何在内存中被读取的以及为什么要有虚拟地址的存在,CPU在运行过程中是拿到程序的虚拟地址还是真实的物理内存。 一、进程地址空间 下面我们先…...
【保姆级】JMeter Mqtt 压测配置
忽然有个紧急任务要对某个服务做MQTT做压测,紧急实操下JMeter,这里记录下非专业测试员的测试过程、(▽`),欢迎👏大家检查指点( ̄∇ ̄)/下载⏬工具JMeter官方下载地址https://jmeter.apache.org/do…...
C语言数据结构初阶(4)----带头双向循环链表
我们先来看看带头双向循环链表的结构:看到这里我们可能会产生一个想法:这个链表看起来好复杂的样子,是不是它的增删改查比单链表更难写呢?嘿嘿,还真的不是这样的,双向链表的增删改查是很好写的哦࿰…...
原生javascript手写一个丝滑的轮播图
通过本文,你将学到: htmlcssjs 没错,就是html,css,js,现在是框架盛行的时代,所以很少会有人在意原生三件套,通过本文实现一个丝滑的轮播图,带你重温html,css和js基础知识。 为什么选用轮播图做示例&…...
【Linux】进程优先级(进程优先级 Linux下优先级 用top命令更改已存在进程的nice 其他概念 进程切换)
文章目录进程优先级Linux下优先级用top命令更改已存在进程的nice:其他概念进程切换进程优先级 我们作为使用者一般不关心优先级,它跟我们的调度器有很大的关系,调度器是为了跟均衡的调度进程。 什么叫做优先级? 优先级和权限是两…...
2016年chatGPT之父Altman与马斯克的深度对话(值得一看)
2016年9月,现今OpenAI CEO,ChatGPT之父,时任创投公司Y Combinator的总裁Sam Altman在特斯拉加州弗里蒙特工厂采访了埃隆马斯克。马斯克阐述了创建OpenAI的初衷,以及就他而言,对于未来最为重要的五件事。这是OpenAI的两…...
基于vscode开发vue3项目的详细步骤教程 3 前端路由vue-router
1、Vue下载安装步骤的详细教程(亲测有效) 1_水w的博客-CSDN博客 2、Vue下载安装步骤的详细教程(亲测有效) 2 安装与创建默认项目_水w的博客-CSDN博客 3、基于vscode开发vue项目的详细步骤教程_水w的博客-CSDN博客 4、基于vscode开发vue项目的详细步骤教程 2 第三方图标库FontAw…...
【C语言】每日刷题 —— 牛客语法篇(5)
前言 大家好,继续更新专栏 c_牛客,不出意外的话每天更新十道题,难度也是从易到难,自己复习的同时也希望能帮助到大家,题目答案会根据我所学到的知识提供最优解。 🏡个人主页:悲伤的猪大肠9的博…...
操作系统(2.1)--进程的描述与控制
目录 一、前驱图和程序执行 1.前驱图 2.程序顺序执行 2.1 程序的顺序执行 2.2 程序顺序执行时的特征 3. 程序并发执行 3.1程序的并发执行 3.2 程序并发执行时的特征 一、前驱图和程序执行 1.前驱图 前趋图:是一个有向无循环图,用于描述进程之间执行的前后…...
JAVA查看动态代理类
JAVA查看代理类 1. 代理类 class 生成 System.setProperty // jdk8及之前的设置System.setProperty("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");// or System.getProperties().put("sun.misc.ProxyGenerator.saveGenerated…...
Chapter2 : SpringBoot配置
尚硅谷SpringBoot顶尖教程 1. 全局配置文件 SpringBoot使用一个全局的配置文件 application.properties 或者 application.yml ,该配置文件放在src/main/resources目录或者类路径/config目录下面, 可以用来修改SpringBoot自动配置的默认值。 yml是YA…...
手撕单链表练习
Topic 1:LeetCode——203. 移除链表元素203. 移除链表元素 - 力扣(LeetCode)移除链表中的数字6操作很简单,我们只需要把2的指向地址修改就好了,原来的指向地址是6现在改为3这个思路是完全正确的,但是在链表…...
Kubuntu安装教程
文章目录Kubuntu介绍下载Kubuntu在VMware虚拟机中安装Kubuntu1. 点击“创建新的虚拟机”2. 选择“自定义(高级)”3. 按照下图所示进行设置设置网络4. 点击“自定义硬件”5. 开启虚拟机6. 进入安装界面,选择中文,之后点击“安装Kub…...
[蓝桥杯] 树状数组与线段树问题(C/C++)
文章目录 一、动态求连续区间和 1、1 题目描述 1、2 题解关键思路与解答 二、数星星 2、1 题目描述 2、2 题解关键思路与解答 三、数列区间最大值 3、1 题目描述 3、2 题解关键思路与解答 标题:树状数组与线段树问题 作者:Ggggggtm 寄语:与其…...
Matlab-Loma Prieta 地震分析
此示例说明如何将带时间戳的地震数据存储在时间表中以及如何使用时间表函数来分析和可视化数据。 加载地震数据 示例文件quake.mat包含 1989 年 10 月 17 日圣克鲁斯山脉 Loma Prieta 地震的 200 Hz 数据。这些数据由加州大学圣克鲁斯分校查尔斯F里希特地震实验室的 Joel Yelli…...
Spring Boot全局异常处理
使用注解方式处理全局异常使用 ControllerAdvice (RestControllerAdvice) 配合 ExceptionHandler适用于返回数据的请求(一般是RESTful接口规范下的JSON报文)package com.example.exception;import org.slf4j.Logger; import org.s…...
websocket每隔5秒给服务端send一次信息
websocket轮询每隔5秒给服务端send一次信息,主要功能点如下:socket 采用了定时器 setInterval() 需要清除定时器否则会报错监听了突然关闭浏览器窗口,destroyed里面直接监听 window.removeEventListener("beforeu…...
2023年中职网络安全——SQL注入测试(PL)解析
SQL注入测试(PL) 任务环境说明: 服务器场景:Server2312服务器场景操作系统:未知(关闭链接)已知靶机存在网站系统,使用Nmap工具扫描靶机端口,并将网站服务的端口号作为Flag(形式:Flag字符串)值提交。访问网站/admin/pinglun.asp页面,此页面存在SQL注入漏洞,使用排…...
从协方差到相关系数:Python实战解析数据关联性
1. 协方差:理解变量间的协同变化 第一次接触协方差这个概念时,我盯着公式看了半天也没明白它到底在说什么。直到有一天我在超市看到薯片和可乐的促销数据,才突然开窍——原来协方差就是在告诉我们两个变量是如何一起变化的。 协方差的数学定义…...
【Python工业视觉部署黄金法则】:20年实战总结的5大避坑指南与实时推理加速秘籍
第一章:Python工业视觉部署的工程化本质与挑战全景工业视觉系统在产线落地时,远非“模型训练完成 → 用OpenCV加载推理”这般线性。其核心矛盾在于:算法原型追求精度与泛化,而工程部署必须兼顾实时性、鲁棒性、可维护性与硬件约束…...
在CentOS 7上远程跑3D应用:保姆级TurboVNC+VirtualGL配置与GPU调用验证
在CentOS 7上构建高性能远程3D工作站:TurboVNC与VirtualGL深度配置指南 当工程师需要远程操控配备NVIDIA GPU的服务器运行Maya、Paraview或TensorBoard等图形密集型应用时,直接使用传统VNC会遇到3D渲染性能低下的问题。本方案通过TurboVNC的高效压缩传输…...
Delphi 综合实战:整合所有知识点,打造企业级进销存小系统(可直接商用)
前面我们陆续学会了 Delphi 开发的所有核心技能:基础语法、桌面工具、数据库操作、串口通信、网络请求、JSON 解析、Excel 导出、UI 美化、多窗体管理、权限控制。 这一篇,我们将 整合所有知识点,做一个完整的 企业级进销存小系统࿰…...
基于LiveQing流媒体平台实现大疆无人机等RTMP推流接入轻松实现Web网页直播+录像回放
大疆无人机RTMP推流接入LiveQing,轻松实现Web网页直播录像留存 在无人机直播场景中,大疆无人机凭借出色的空中视角和稳定的图传表现,成为应急救援、工程巡检、赛事直播、国土测绘等领域的首选设备。但很多用户在使用大疆无人机直播时…...
CogVideoX LoRA微调终极指南:用消费级GPU打造个性化视频生成模型
CogVideoX LoRA微调终极指南:用消费级GPU打造个性化视频生成模型 【免费下载链接】CogVideo text and image to video generation: CogVideoX (2024) and CogVideo (ICLR 2023) 项目地址: https://gitcode.com/GitHub_Trending/co/CogVideo 你是否曾经梦想过…...
4大突破:面向全场景的聊天应用UI设计方案
4大突破:面向全场景的聊天应用UI设计方案 【免费下载链接】ui Simple UI examples from my social media 项目地址: https://gitcode.com/GitHub_Trending/ui1/ui 现代聊天应用如何在视觉体验与功能实用性之间取得平衡?GitHub推荐项目精选中的聊天…...
从入门到精通:Java 异常处理完全指南
Java 异常处理:从原理到实战最佳实践 摘要 异常处理是 Java 开发的核心基础能力,也是区分初级开发者与资深开发者的重要标志。优秀的异常处理能够提升程序的健壮性、可维护性、可调试性,避免程序崩溃、数据丢失、日志混乱等生产问题。本文将…...
STM32栈空间溢出处理与优化技术
STM32栈空间溢出处理技术解析1. 栈空间溢出问题概述在STM32嵌入式开发中,函数内部定义的局部变量存储在栈空间中。STM32的启动文件中预定义了栈空间大小,当局部变量占用空间超过预设栈大小时,虽然编译过程不会报错,但运行时可能出…...
Chatbot Arena榜单地址解析:如何高效获取与利用开源大模型评测数据
Chatbot Arena榜单地址解析:如何高效获取与利用开源大模型评测数据 作为一名AI开发者,你是否也经历过这样的“选型阵痛”?面对琳琅满目的开源大模型,从Llama、Mistral到Qwen、DeepSeek,每个模型都宣称自己性能卓越。但…...
