二叉树遍历及应用

在这里插入图片描述

文章目录

  • 前言
  • 构建二叉树
  • 前序遍历
  • 中序遍历
  • 后序遍历
  • 二叉树的结点个数
  • 二叉树的叶节点个数
  • 二叉树的高度
  • 二叉树第K层结点个数

前言

二叉树的遍历及应用主要是运用了递归、分治的思想。在这一篇文章,小编将介绍二叉树的前序遍历、中序遍历、后序遍历,求二叉树结点个数、叶节点个数、第K层结点个数、二叉树的深度。

构建二叉树

手搓二叉树的结构

小编简单构建一个二叉树的结构,方便后面的测试

构建的方式比较简单,在树的结构中有当前结点的数据、当前结点的左节点、右节点。除此之外,还需要开辟结点。

有了 前面数据结构的学习,小编认为手搓一个二叉树的结构相对来说简单一些

typedef int Tdatatype;typedef struct Tree
{Tdatatype data;struct Tree* left;struct Tree* right;
}Tree;Tree* BuyTree(Tdatatype x)
{Tree* node = (Tree*)malloc(sizeof(Tree));if (node == NULL){perror("malloc fail");return NULL;}node->data = x;node->left = NULL;node->right = NULL;return node;
}Tree* CreatTree()
{Tree* node1 = BuyTree(1);Tree* node2 = BuyTree(2);Tree* node3 = BuyTree(3);Tree* node4 = BuyTree(4);Tree* node5 = BuyTree(5);Tree* node6 = BuyTree(6);Tree* node7 = BuyTree(7);node1->left = node2;node1->right = node4;node2->left = node3;node2->right = node7;node4->left = node5;node4->right = node6;return node1;
}

前序遍历

若二叉树为空,则操作为空
否则:
(1)访问根节点
(2)先序遍历左子树
(3)先序遍历右子树

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

中序遍历

若二叉树为空,则操作为空
否则:
(1)中序遍历左子树
(2)访问根节点
(3)中序遍历右子树

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

后序遍历

若二叉树为空,则操作为空
否则:
(1)后序遍历左子树
(2)后序遍历右子树
(3)访问根节点

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

二叉树的结点个数

求二叉树的结点个数还是用到递归的思想,即子问题分治,还需要有结束条件

子问题分治:左子树结点个数+右子树结点个数+1
返回条件:根节点为空

int TreeSize(Tree* root)
{return root == NULL ? 0 : TreeSize(root->right) + TreeSize(root->right) + 1;
}

二叉树的叶节点个数

求二叉树叶节点个数依然是递归思想

子问题分治:左子树叶子节点个数+右子树叶子节点个数
返回条件:根节点为空,,返回0;是叶子节点,返回1

int TreeLeaSize(Tree* root)
{if (root == NULL)return 0;if (root->left == NULL && root->right == NULL)return 1;return TreeLeaSize(root->left) + TreeLeaSize(root->right);
}

二叉树的高度

子问题分治:找左子树和右子树中高度较大的那一个,并+1
返回条件:根节点为空,返回0

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

二叉树第K层结点个数

二叉树第k层的节点数=左子树的第k-1层的节点数+右子树第k-1层的节点数。

因为二叉树没有第0层,是从第一层开始的,所以k==1时,返回1。

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

在这里插入图片描述

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

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

相关文章

服务器数据恢复—服务器重装系统导致逻辑卷发生改变的数据恢复案例

服务器数据恢复环境: 某品牌linux操作系统服务器,服务器中有4块SAS接口硬盘组建一组raid5阵列。服务器中存放的数据有数据库、办公文档、代码文件等。 服务器故障&检测: 服务器在运行过程中突然瘫痪,管理员对服务器进行了重装…

全新仿某度文库网站源码/在线文库源码/文档分享平台网站源码/仿某度文库PHP源码

源码简介: 全新仿某度文库网站源码/在线文库源码,是以phpMySQL开发的,它是仿某度文库PHP源码。有功能免费文库网站 文档分享平台 实现文档上传下载及在线预览。 仿百度文库是一个以phpMySQL进行开发的免费文库网站源码。仿某度文库实现文档…

24双非硕的秋招总结

24 双非硕的秋招总结 结果: 运气捡漏去了腾讯 想想自己整个研究生学习过程,还是挺坎坷的,记录一下,也给未来的同学提供一些参考。 研一 我是研一上开始学前端的,应该是21年10月份左右,我们实验室是专门…

【算法】Rabin-Karp 算法

目录 1.概述2.代码实现3.应用 更多数据结构与算法的相关知识可以查看数据结构与算法这一专栏。 有关字符串模式匹配的其它算法: 【算法】Brute-Force 算法 【算法】KMP 算法 1.概述 (1)Rabin-Karp 算法是由 Richard M. Karp 和 Michael O. R…

微服务实战系列之MemCache

前言 书接前文,马不停蹄,博主继续书写Cache的传奇和精彩。 Redis主要用于数据的分布式缓存,通过设置缓存集群,实现数据的快速响应,同时也解决了缓存一致性的困扰。 EhCache主要用于数据的本地缓存,因无法保…

字符集与编码规则

字符集 强调:UTF-8是编码规则,不是字符集 过程: 字符 --查表获得对应数字,--编码 解码---查表----获取字符 ASCII码 :一个字节 8bit GBK字符集(windows系统默认使用的GBK,系统显示ANSI) 存…

JavaScript WebAPI(三)(详解)

这次介绍一下webAPI中的一些知识: 回调函数 回调函数是指 如果将函数A做为参数传递给函数B时,我们称函数A为回调函数 例如: // 立即执行函数中传递的函数是一个回调函数 (function(){ console.log("我是回调函数") })(); // …

人工智能时代:AIGC的横空出世

🌈个人主页:聆风吟 🔥系列专栏:数据结构、网络奇遇记 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. 什么是AIGC?二. AIGC的主要特征2.1 文本生成2.2 图像生成2.3 语音生成2.4 视…

基于若依的ruoyi-nbcio流程管理系统增加流程节点配置(三)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 这一节主要是对每个流程节点的字段规则设置与操作规则设置,目前也是只针对自定义业务表单。 1、…

Android获取原始图片Bitmap的宽高大小尺寸,Kotlin

Android获取原始图片Bitmap的宽高大小尺寸,Kotlin val options BitmapFactory.Options()options.inJustDecodeBounds trueval decodeBmp BitmapFactory.decodeResource(resources, R.mipmap.p1, options)//此时,decode出来的decodeBmp宽高并不是原始图…

C语言-预处理与库

预处理、动态库、静态库 1. 声明与定义分离 一个源文件对应一个头文件 注意&#xff1a; 头文件名以 .h 作为后缀头文件名要与对应的原文件名 一致 例&#xff1a; 源文件&#xff1a;01_code.c #include <stdio.h> int num01 10; int num02 20; void add(int a, in…

OpenSSL 使用AES对文件加解密

AES&#xff08;Advanced Encryption Standard&#xff09;是一种对称加密算法&#xff0c;它是目前广泛使用的加密算法之一。AES算法是由美国国家标准与技术研究院&#xff08;NIST&#xff09;于2001年发布的&#xff0c;它取代了原先的DES&#xff08;Data Encryption Stand…

JVM GC算法

一, 垃圾回收分类: 按线程数分&#xff0c;可以分为串行垃圾回收器和并行垃圾回收器。 按工作模式分&#xff0c;可以分为并发垃圾回收器和独占式垃圾回收器 按碎片处理方式分&#xff0c;可以分为压缩式垃圾回收器和非压缩式垃圾回收器按工作的内存区间分&#xff0c;又可分为…

2000-2021年上市公司过度负债数据

2000-2021年上市公司过度负债数据 1、时间&#xff1a;2000-2021年 2、指标&#xff1a; 证券代码、证券简称、会计期间、上市日期、行业代码、行业名称、是否剔除ST或*ST股、是否剔除当年新上市、已经退市或被暂停退市的公司、产权性质、盈利能力、杠杆率行业中位数、成长性…

数据结构与算法-静态查找表

&#x1f31e; “清醒 自律 知进退&#xff01;” 查找 &#x1f388;1.查找的相关概念&#x1f388;2.静态查找表&#x1f52d;2.1静态查找表的类定义&#x1f52d;2.2顺序查找&#x1f52d;2.3二分查找&#x1f50e;二分查找例题 &#x1f52d;2.4分块查找&#x1f52d;2.5三…

oracle sql相关语法

SQL*PLUS 在SQL*PLUS执行&#xff0c;会在执行后显示查询的执行计划和统计信息 SET AUTOTRACE ON;SELECT * FROM your_table WHERE column_name value;SET AUTOTRACE OFF;PLSQL PLSQL查询sql界面&#xff0c;鼠标右键&#xff0c;点击执行计划&#xff0c;会出现sql的执行计…

鸿蒙原生应用/元服务开发-AGC分发如何生成密钥和和证书请求文件

HarmonyOS通过数字证书&#xff08;.cer文件&#xff09;和Profile文件&#xff08;.p7b文件&#xff09;等签名信息来保证应用的完整性&#xff0c;应用如需上架到华为应用市场必须通过签名校验。因此&#xff0c;开发者需要使用发布证书和Profile文件对应用进行签名后才能发布…

04_Flutter自定义Slider滑块

04_Flutter自定义Slider滑块 一.Slider控件基本用法 Column(mainAxisAlignment: MainAxisAlignment.start,children: <Widget>[Text("sliderValue: ${_sliderValue.toInt()}"),Slider(value: _sliderValue,min: 0,max: 100,divisions: 10,thumbColor: Colors.…

Java研学-配置文件

一 配置文件 1 作用–解决硬编码的问题 在实际开发中,有时将变量的值直接定义在.java源文件中;如果维护人员想要修改数据,无法完成(因为没有修改权限),这种操作称之为硬编码 2 执行原理: 将经常需要改变的数据定义在指定类型的文件中,通过java代码对指定的类型的文件进行操作…

软件测试框架实战:Python+Slenium搭建Web自动化测试框架全教程

PythonSelenium是一种流行的Web自动化测试框架&#xff0c;可以模拟真实的用户操作&#xff0c;对网页进行功能和样式的验证。要通过selenium测试网页&#xff0c;需要以下几个步骤&#xff1a; 安装selenium库和浏览器驱动 。使用selenium提供的方法来控制浏览器窗口大小、后…