链式二叉树--前序中序后序遍历,高度,节点个数问题

目录

 前言:

一:链式二叉树的结构定义

 二:链式二叉树的遍历--->前序,中序,后序

1.前序

 递归展开图分析

2.中序 

递归展开图分析 

3.后序 

三:二叉树结点的求解 

1.二叉树总结点

递归展开分析 

2.二叉树叶子结点数 

递归展开分析 

3.二叉树第k层节点个数 

递归展开分析 

四:二叉树的高度 

五:总结语


接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧

 前言:

链式二叉树作为后续AVL树,B系列树的雏形,理解掌握链式二叉树的各种操作很重要,此处就需要用递归来实现链式二叉树的各种操作,相信认真学习过后会对递归有更深刻的理解,接下来我们就开始上菜

一:链式二叉树的结构定义

链式二叉树的结构由指针域和数值域组成,况且链式二叉树并不都是完全二叉树,还有普通二叉树,每个节点最多两个孩子

 二:链式二叉树的遍历--->前序,中序,后序

1.前序

BTNode* Buynode(int x)
{BTNode* newnode = (BTNode*)malloc(sizeof(BTNode));if (newnode == NULL){perror("malloc fail\n");return NULL;}newnode->left = NULL;newnode->right = NULL;newnode->data = x;return newnode;
}BTNode* CreatTree()
{BTNode* n1 = Buynode(1);BTNode* n2 = Buynode(2);BTNode* n3 = Buynode(3);BTNode* n4 = Buynode(4);BTNode* n5 = Buynode(5);BTNode* n6 = Buynode(6);BTNode* n7 = Buynode(7);n1->left = n2;n1->right = n3;n2->left = n4;n2->right = n5;n3->left = n6;n3->right = n7;return n1;
}
void PrevOrder(BTNode* root)
{if (root == NULL){printf("N ");return ;}printf("%d ", root->data);PrevOrder(root->left);PrevOrder(root->right);
}
 递归展开图分析

2.中序 

void InOrder(BTNode* root)
{if (root == NULL){printf("N ");return;}InOrder(root->left);printf("%d ", root->data);InOrder(root->right);
}
递归展开图分析 

3.后序 

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

后续递归展开图同上展开即行

三:二叉树结点的求解 

1.二叉树总结点

// 二叉树节点个数
int BinaryTreeSize(BTNode* root)
{if (root == NULL)//递归结束条件{return 0;}return BinaryTreeSize(root->left) + BinaryTreeSize(root->right) + 1;//从左子树和右子树中分别计数
}
递归展开分析 

2.二叉树叶子结点数 

// 二叉树叶子节点个数
int BinaryTreeLeafSize(BTNode* root)
{if (root == NULL)//空树返回0return 0;if (root->left == NULL && root->right == NULL)//叶子节点无孩子return 1;return BinaryTreeLeafSize(root->left)//递归往下寻找 + BinaryTreeLeafSize(root->right);
}
递归展开分析 

3.二叉树第k层节点个数 

// 二叉树第k层节点个数
int BinaryTreeLevelKSize(BTNode* root, int k)
{if (root == NULL)return 0;if (k == 1)//循环走到k==1时停止,且不为空return 1;//分治思想:转化为求k-1层的节点数return BinaryTreeLevelKSize(root->left, k - 1) + BinaryTreeLevelKSize(root, k - 1);
}
递归展开分析 

四:二叉树的高度 

//二叉树的高度
int BinaryTreeHeight(BTNode* root)
{if (root == NULL)return 0;//记录左右长度,再进行比较int leftHeight = BinaryTreeHeight(root->left);int rightHeight = BinaryTreeHeight(root->right);return leftHeight > rightHeight ? leftHeight + 1 : rightHeight + 1;
}

 此图递归展开图就省略了昂

五:总结语

学会二叉树得学会画图,实在不懂时,画画递归展开图会好很多的

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

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

相关文章

clickhouse学习笔记01(小滴课堂)

老王经历-数据库架构演变历史 你是否能分清OLTP和OLAP系统 急速掌握-数据库里面行存储和列式存储 新一代列式存储ClickHouse介绍和应用场景说明 Linux服务器容器化部署ClickHouse实战 记得要在安全组里配置开放端口号。 到这我们就安装完了。 简单使用: 创建你的第…

不锈钢多功能电工剥线钳分线绕线剪线剥线钳剥线压线扒皮钳子

品牌:银隆 型号:089B绿色 材质:镍铬钢(不锈钢) 颜色分类:089B灰色,089B红色,089B绿色,089B黑色,089B橙色 功能齐集一身,一钳多用,多功能剥线钳。剥线,剪线&#xff…

前端学习之css伪元素选择器

伪元素选择器 &#xff08;注释是对各个内容的解释与理解&#xff09; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>伪元素选择器</title><!-- 双冒号开头一般都称为伪元素&#xff0c;…

http请求方法15种,附图可以下载保存备查。

一、http请求组成和流程 HTTP请求是客户端&#xff08;如浏览器&#xff09;向服务器发送的请求&#xff0c;以获取特定资源或执行特定操作。HTTP请求由以下几个部分组成&#xff1a; 请求行&#xff1a;包含请求方法、请求的URL和HTTP协议版本。常见的请求方法有GET、POST、P…

腾讯云服务器配置2核4G5M带宽是什么意思?

腾讯云服务器2核4G5M带宽配置是代表什么&#xff1f;代表2核CPU、4G内存、5M公网带宽&#xff0c;这是一款轻量应用服务器&#xff0c;系统盘为60GB SSD云硬盘&#xff0c;活动页面 txybk.com/go/txy 活动打开如下图&#xff1a; 腾讯云2核4G5M服务器 如上图所示&#xff0c;这…

【漏洞复现】大华智慧园区综合管理平台deleteftp命令执行漏洞

Nx01 产品简介 大华智慧园区综合管理平台是一款综合管理平台&#xff0c;具备园区运营、资源调配和智能服务等功能。该平台旨在协助优化园区资源分配&#xff0c;满足多元化的管理需求&#xff0c;同时通过提供智能服务&#xff0c;增强使用体验。 Nx02 漏洞描述 大华智慧园区…

stable diffusion webui 搭建和初步使用

官方repo: GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI 关于stable-diffusion的介绍&#xff1a;Stable Diffusion&#xff5c;图解稳定扩散原理 - 知乎 一、环境搭建和启动 准备在容器里面搞一下 以 ubuntu22.04 为基础镜像&#xff0c;新建…

Web核心,HTTP,tomcat,Servlet

1&#xff0c;JavaWeb技术栈 B/S架构:Browser/Server&#xff0c;浏览器/服务器架构模式&#xff0c;它的特点是&#xff0c;客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器&#xff0c;获取Web资源&#xff0c;服务器把Web资源…

MyBatis3源码深度解析(十三)MyBatis的核心组件(二)

文章目录 前言4.3 Configuration组件4.3.9 mappedStatements4.3.10 Configuration组件的其它属性 4.4 Executor4.5 MappedStatement4.6 StatementHandler4.7 TypeHandler4.8 ParameterHandler4.9 ResultSetHandler4.10 小结 前言 MyBatis框架的配置信息有两种&#xff0c;一种…

pytorch卸载cuda+cudnn并重新配置GPU环境,亲测有效

pytorch卸载cudacudnn 一、卸载cuda 进入【控制面板】&#xff0c;点击【卸载程序】 将红色框中带版本号的都卸载 二、删除cudnn配置 1、进入安装路径 将以下版本号文件直接删除 pytorch配置GPU环境 一、查看支持的cuda最高版本 1、winr&#xff0c;输入cmd&#xf…

理解计算属性等

计算属性 计算属性的作用是将写在computed内的写了对应的属性名&#xff0c;属性值都是函数&#xff0c;将这属性值的函数调用之后的返回值赋给属性名的变量。因此其实计算属性内的是值&#xff0c;不是方法&#xff0c;因此写插值等语句是只是写变量&#xff0c;而不是调用。且…

每日五道java面试题之mybatis篇(二)

目录&#xff1a; 第一题. Mybatis优缺点第二题. Hibernate 和 MyBatis 的区别?第三题. MyBatis编程步骤是什么样的&#xff1f;第四题. 请说说MyBatis的工作原理第五题. MyBatis的功能架构是怎样的? 第一题. Mybatis优缺点 优点 与传统的数据库访问技术相比&#xff0c;ORM…

MySQL中的索引失效情况介绍

MySQL中的索引是提高查询性能的重要工具。然而&#xff0c;在某些情况下&#xff0c;索引可能无法发挥作用&#xff0c;甚至导致查询性能下降。在本教程中&#xff0c;我们将探讨MySQL中常见的索引失效情况&#xff0c;以及它们的特点和简单的例子。 1. **索引失效的情况** …

每日GEE| Day 01 研究区域矢量数据加载

// Add study region var roi ee.FeatureCollection(geometry) Map.centerObject(roi,8); var styling {color:red,fillColor:00000000,width:2};// display hollow roi Map.addLayer(roi.style(styling), {}, "outline"); 以上代码的功能实现了对研究区域的加载&am…

第二十五天-Seaborn数据可视化库

目录 1.介绍 2.使用 1.seaborn官网&#xff1a; 2.安装 3.基础用法 4.导入数据 5.分析基金数据 1.绘制每个月收盘价的趋势线 2.计算涨跌幅 3.设置统计基点 4.分布图&#xff1a;分析涨跌幅数量 5.箱型图 6.回归图 7.热力图 1.介绍 1.与matplotlib区别 2.基于matp…

还看YOLOv8,YOLOv9呢,烂怂卷积有啥好看的?教你利用多模态大模型做目标检测!

文章大纲 大模型业态与idea 来源可行性探索现有成果国内多模态APP 探索利用现有平台进行快速开发 MVP参考文献大模型业态与idea 来源 有一次我在单位汇报的时候,大领导问:深度学习先在还这么落后嘛?每次解决一个问题还要重新训练一个模型࿱

zookeeper快速入门三:zookeeper的基本操作

在zookeeper的bin目录下&#xff0c;输入./zkServer.sh start和./zkCli.sh启动服务端和客户端&#xff0c;然后我们就可以进行zookeeper的基本操作了。如果是windows&#xff0c;请参考前面章节zookeeper快速入门一&#xff1a;zookeeper安装与启动 目录 一、节点的增删改查 …

python之前端css样式(一)

css ID选择器 #c1{color:red;#边框为红色border:1px solid red; } <div id"c2">中国移动</div> 类选择器 .xx{color:blue; } <div class"xx">中国联通</div> 标签选择器 li{color: pink; } <ul><li>北京</li…

reloading,一个很实用的Python库!

Python是一门非常流行的编程语言&#xff0c;它的广泛应用和丰富的第三方库使得开发者们能够轻松完成各种任务。reloading是Python中一个强大的库&#xff0c;它能够在程序运行时重新加载修改过的模块&#xff0c;为开发者提供了便利和灵活性。本文将全面介绍reloading库&#…

SqlServer2008(R2)(二)SqlServer2008(R2)安装和卸载注意事项整理

二、注意事项 1、 安装数据中心版 说明&#xff1a;此激活版仅用于测试和学习使用。 这是官方的下载页面&#xff08;需要付费订阅&#xff09;&#xff1a; http://msdn.microsoft.com/zh-cn/subscriptions/downloads/default.aspx 数据中心版&#xff1a; PTTFM-X467G-P7RH…