二叉树之树的高以及遍历

二叉树的高其实很简单就一句话:

从根节点到叶节点的最长路径中的边数就是二叉树的高

 int FindHeight(Btree root){int leftheight;int rightheight;if(root==NULL){return -1;}else{leftheight=FindHeight(root->left );rightheight=FindHeight(root->right );}return (max(leftheight,rightheight))+1;}

二叉树的遍历深度优先和广度优先

广度优先遍历 就是一层一层的遍历,也叫做层序遍历

深度优先可以分为三种,前序,中序,后序 遍历

前序遍历

访问根节点;② 先序遍历左子树;③ 先序遍历右子树。(简记为 “根左右”)

上图的前序遍历顺序为:F,D,B,A,C,E,J,G,I,H,K

中序遍历

若二叉树为空,则什么也不做;否则:
① 中序遍历左子树;② 访问根节点;③ 中序遍历右子树。(简记为 “左根右”)

上图的中序遍历顺序为:A,B,C,D,E,F,G,H,I,J,K

后序遍历

若二叉树为空,则什么也不做;否则:
① 后序遍历左子树;② 后序遍历右子树;③ 访问根节点;(简记为 “左右根”)

后序遍历的顺序为

A.C,B,E,D,H,I,G,K,J,F

OK,搞清楚这些之后,我们来写一下代码。首先我们来写一下层序遍历的代码

层序遍历我们需要借助队列来写,如下图,一个元素出对,他的左右节点就要入队这就是层序遍历的精华,直到队列为空,我们的层序遍历也就结束啦

前序遍历

这两张

图太重要了

代码如下

 void LevelOrder(Btree root){if(root==NULL)return ;else{queue<node*> Q;Q.push(root);while(!Q.empty()){Btree current=Q.front();cout<<current->data<<" ";if(current->left!=NULL)Q.push(current->left);if(current->right!=NULL)Q.push(current->right);Q.pop();//remove at front}}}void preorder(Btree root){if(root==NULL) return;else{cout<<root->data<<" ";preorder(root->left );preorder(root->right );}}void Inorder(Btree root){if(root==NULL)return;else{Inorder(root->left);cout<<root->data<<" ";Inorder(root->right);}}
void postorder(Btree root)
{if(root==NULL)return;else{postorder(root->left);postorder(root->right );cout<<root->data<<" ";}}

判断是否是二叉树,运用了很强的递归逻辑,认真思考一下

bool IsSubtreeLesser(Btree root,int value)
{if(root==NULL) return true;if(root->data<=value&&IsSubtreeLesser(root->left,value)&&IsSubtreeLesser(root->right,value))return true;elsereturn false;
}
bool IsSubtreeGreater(Btree root,int value)
{if(root==NULL) return true;if(root->data > value && IsSubtreeGreater(root->left,value)&&IsSubtreeGreater(root->right,value))return true;elsereturn false;}
bool IsBinarySearchTree(Btree root)
{//return true if bstif(IsSubtreeLesser(root->left,root->data)&&IsSubtreeGreater(root->right,root->data )&&IsBinarySearchTree(root->left )&&IsBinarySearchTree(root->right))return true;
}

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

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

相关文章

DeepSeek技术架构解析:MoE混合专家模型

一、前言 2025年初&#xff0c;DeepSeek V3以557万美元的研发成本&#xff08;仅为GPT-4的1/14&#xff09;和开源模型第一的排名&#xff0c;在全球AI领域掀起波澜。其核心创新之一——混合专家模型&#xff08;Mixture of Experts, MoE&#xff09;的优化设计&#xff0c;不…

VMware主机换到高配电脑,高版本系统的问题

原来主机是i3 ,windows7系统&#xff0c;vmware 14.0,虚机系统是ubuntu 14.04。目标新机是i7 14700KF,windows11系统。原以为安装虚拟机&#xff0c;将磁盘文件&#xff0c;虚拟机配置文件拷贝过去可以直接用。 新目标主机先安装了vmware 15&#xff0c;运行原理虚机&#xff0…

数字化转型驱动卫生用品安全革新

当315晚会上晃动的暗访镜头揭露卫生巾生产车间里漂浮的异物、纸尿裤原料仓中霉变的碎屑时&#xff0c;这一触目惊心的场景无情地撕开了“贴身安全”的遮羞布&#xff0c;暴露的不仅是部分企业的道德缺失&#xff0c;更凸显了当前检测与监管体系的漏洞&#xff0c;为整个行业敲响…

VideoHelper 油猴脚本,重塑你的视频观看体验

VideoHelper 油猴脚本&#xff0c;重塑你的视频观看体验 在日常上网看视频时&#xff0c;你是否也被这些问题困扰&#xff1a;视频网站开头的广告又臭又长&#xff0c;找个合适的播放倍速要在一堆选项里翻半天&#xff0c;每次手动调音量、点全屏按钮繁琐又影响沉浸感&#xf…

(C语言)习题练习 sizeof 和 strlen

sizeof 上习题&#xff0c;不知道大家发现与上一张的习题在哪里不一样嘛&#xff1f; int main() {char arr[] "abcdef";printf("%zd\n", sizeof(arr));printf("%zd\n", sizeof(arr 0));printf("%zd\n", sizeof(*arr));printf(&…

Java多线程与高并发专题——使用 Future 有哪些注意点?Future 产生新的线程了吗?

Future 的注意点 1. 当 for 循环批量获取 Future 的结果时容易 block&#xff0c;get 方法调用时应使用 timeout 限制 对于 Future 而言&#xff0c;第一个注意点就是&#xff0c;当 for 循环批量获取 Future 的结果时容易 block&#xff0c;在调用 get方法时&#xff0c;应该…

STM32基础教程——PWM驱动LED呼吸灯

目录 前言 技术实现 原理图 接线图 代码实现 内容要点 PWM基本结构 开启外设时钟 配置GPIO端口 配置时基单元 初始化输出比较单元 输出PWM波形 输出比较通道重映射 前言 PWM(Pulse Width Modulation):一种通过调节脉冲信号的占空比&#xff08;高电平持续时间与整…

算法基础——栈

一、栈的概念 栈是⼀种只允许在⼀端进⾏数据插⼊和删除操作的线性表。 进⾏数据插⼊或删除的⼀端称为栈顶&#xff0c;另⼀端称为栈底。不含元素的栈称为空栈。进栈就是往栈中放⼊元素&#xff0c;出栈就是将元素弹出栈顶。 二、栈的模拟实现 1. 创建 本质还是线性表&#…

JVM类文件结构详解

文章目录 前言代码示例1.魔数2.版本3.常量池4.访问标识与继承信息访问标识继承信息 5.Field 信息6 Method 信息构造方法分析(method-main)main方法分析(method-main) 7.附加属性 前言 在 Java 中&#xff0c;JVM 可以理解的代码就叫做字节码&#xff08;即扩展名为 .class 的文…

5.安全相关(双手启动、安全触边传感器)

一、关于双手启动按钮的使用规范 本文介绍双手启动按钮的使用。概括来讲&#xff1a; 双手按下之间的时间差间隔应该在0.5-2秒之间。一旦释放任何一个按钮&#xff0c;启动信号输出结束。只有两个按钮都被释放之后&#xff0c;才能再次触发双手启动信号。如果某按钮被按下超过…

电脑上不了网普通用户排除方法

1&#xff1a;首先通过电脑的运行/CMD/ipconfig /all 命令查看电脑的ip地址是否正常如图&#xff1a; 2&#xff1a;在命令行中运行&#xff1a;ping 127.0.0.1 如图则正常&#xff0c;否则要重新安装网卡驱动 程序。 3&#xff1a;用ping命令&#xff0c;ping一下同网段的电…

【中文翻译】第3章(1/3)-The Algorithmic Foundations of Differential Privacy

为方便阅读&#xff0c;故将《The Algorithmic Foundations of Differential Privacy》翻译项目内容搬运至此&#xff1b; 教材原文地址&#xff1a;https://www.cis.upenn.edu/~aaroth/Papers/privacybook.pdf 中文翻译版 Github 项目地址1&#xff1a;https://github.com/gu…

2.1词法分析任务

编译器结构 前端 词法分析器的任务 字符流到记号流 eg: 把这些单词就叫做记号 EOF结束符号&#xff01;

Linux操作系统7- 线程同步与互斥5(POSIX条件变量生产者消费者模型的进一步使用)

上篇文章&#xff1a;Linux操作系统7- 线程同步与互斥4&#xff08;基于POSIX条件变量的生产者消费者模型&#xff09;-CSDN博客 本篇代码仓库&#xff1a; 支持处理简单任务的生产者消费者模型代码 生产者-消费者-保存者三线程两队列模型 多生产多消费的生产者消费者模型 进一…

【嵌入式学习2】C语言 - VScode环境搭建

目录 ## 语言分类 ## c语言编译器 ## VScode相关配置 ## 语言分类 编译型语言&#xff1a;C&#xff0c;C解释型语言&#xff1a;python&#xff0c;JS ## c语言编译器 分类GCC 系列MinGWCygwinMSVC系列一套编程语言编译器将GCC编译器和GNU Binutils移植到Win32平台下的产物…

使用Doris broker load导入数据到带Kerberos的HA HDFS的命令详解

以下是关于 Doris Broker Load 结合 Kerberos 认证的 HDFS 数据导入的详细解析&#xff1a; 一、Broker Load 核心原理 Broker Load 是 Doris 中用于从 HDFS/S3 等远程存储系统异步导入大数据的工具&#xff0c;其核心流程如下&#xff1a; 任务提交&#xff1a;用户通过 SQL…

数字化转型 2.0:AI、低代码与智能分析如何重塑企业竞争力?

引言&#xff1a;数字化转型进入2.0时代 在过去的十几年里&#xff0c;企业的数字化转型&#xff08;1.0&#xff09;主要围绕信息化和自动化展开&#xff0c;例如引入ERP、CRM等系统&#xff0c;提高办公效率&#xff0c;减少人为失误。然而&#xff0c;随着市场竞争加剧&…

指针,数组 易混题解析(一)

目录 一.相关知识点 1.数组名是什么&#xff1f; 两个例外&#xff1a; 2.strlen 3.sizeof 4. * ( ) 与 [ ] 的互换 二.一维数组 三.字符数组 1. 字符 &#xff08;1&#xff09;sizeof &#xff08;2&#xff09;strlen 2.字符串 &#xff08;1&#xff09;si…

ABC392题解

A 算法标签: 模拟 #include <iostream> #include <algorithm> #include <cstring>using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int w[3];for (int i 0; i < 3; i) cin >> w[i];sort(w, w 3);if (w[0]…

Quartus + VScode 实现模块化流水灯

文章目录 一、通过VScode编写Verilog代码二、模块化编程三、代码示例 一、通过VScode编写Verilog代码 1、下载Vscode 2、下载相关插件 搜索Verilog就会弹出有如图所示的插件&#xff0c;下载并安装 3、创建Quartus项目 4、创建完成后点击Tools&#xff0c;选择Options 然后在…