探索二叉树的奇幻世界:解密二叉树的结构与遍历

文章目录

目录

一、二叉树的基本操作

1.1 获取树中节点的个数  

1.2 获取叶子节点的个数

1.3 获取第K层节点的个数

1.4 获取二叉树的高度

二、二叉树相关习题

2.1 检查两颗树是否相同

2.2 另一颗树的子树

2.3 翻转二叉树

2.4 判断一颗二叉树是否是平衡二叉树 


 一、二叉树的基本操作

public class TreeNode {static class treeNode{public char val;public treeNode left;       //储存左孩子的引用public treeNode right;      //储存右孩子的引用public treeNode(char val) {this.val = val;}}public treeNode creattree(){treeNode A=new treeNode('A');treeNode B=new treeNode('B');treeNode C=new treeNode('C');treeNode D=new treeNode('D');treeNode E=new treeNode('E');treeNode F=new treeNode('F');A.left=B;A.right=C;B.left=D;C.left=E;C.right=F;return A;}
}

函数creattree()用于创建一个简单的二叉树。函数中创建了六个treeNode对象,分别为ABCDEF。然后,将每个节点的左子节点和右子节点分别设置为BCDEEF,如下所示:

1.1 获取树中节点的个数  

//获取树中节点的个数public int size2(treeNode root) {if(root==null){return 0;}return size2(root.right)+size2(root.left)+1;}

    本章习题中很多都是采用递归的方法,求树中节点的个数一样,通过遍历二叉树的每个节点,计算叶子节点的数量。在递归过程中,函数会递归调 size2(root.left)和 size2(root.right),计算左子树和右子树的叶子节点数量。最终,函数返回叶子节点的数量,表示二叉树中叶子节点的数量。

1.2 获取叶子节点的个数

 public int getLeftCount2(treeNode root){if(root==null){return 0;}if(root.left!=null&&root.right!=null){return 1;}return getLeftCount2(root.left)+getLeftCount2(root.right);
}

 1.3 获取第K层节点的个数

//获取第K层节点的个数public int getLevelNodeCount(treeNode root,int key){if(root==null){return 0;}if(key==1){return 1;}return getLevelNodeCount(root.right,key-1)+getLevelNodeCount(root.left,key-1);}

1.4 获取二叉树的高度

//获取二叉树的高度public int getHeight(treeNode root){if(root!=null){return 0;}int rightH=getHeight(root.right);int leftH=getHeight(root.left);return Math.max(rightH,leftH)+1;}

二、二叉树相关习题

2.1 检查两颗树是否相同

class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {if(p!=null&&q==null||p==null&&q!=null){return false;}if(p==null&&q==null){return true;}if(p.val!=q.val){return false;}return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);}
}

2.2 另一颗树的子树

借用2.1的方法判断两个树是否相同,

1、递归的过程树的根节点一直在变化,首先判断树是否为空

2、判断当前根节点是否与子树相同

3、分别用根节点的左子树和右子树分别判断是否与子树相同(注意:不用isSameTree的原因是isSameTree只会判断一次,就结束了)

class Solution {public boolean isSubtree(TreeNode root, TreeNode subRoot) {if(root==null){return false;}if(isSameTree(root,subRoot)) return true;if(isSubtree(root.right,subRoot))return true;if(isSubtree(root.left,subRoot))return true;return false;}public boolean isSameTree(TreeNode p, TreeNode q) {if(p!=null&&q==null||p==null&&q!=null){return false;}if(p==null&&q==null){return true;}if(p.val!=q.val){return false;}return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);}
}

2.3 翻转二叉树

思路:

        遍历二叉树的每个节点 ,使其左右节点进行互换,然后递归左右节点,返回根节点 

class Solution {public TreeNode invertTree(TreeNode root) {if(root==null){return null;}TreeNode p=root.left;root.left=root.right;root.right=p;invertTree(root.left);invertTree(root.right);return root;}
}

2.4 判断一颗二叉树是否是平衡二叉树

 

思路:

        1、借用1.4获取二叉树高度的函数

        2、遍历改树的每一个节点,求每个节点的的左子树和右子树高度的差是不是大于2,是则返回false

        3、若小于二&&左子树是不是平衡二叉树&&右子树是不是平衡二叉树

class Solution {public boolean isBalanced(TreeNode root) {if(root==null){return true;}int leftHight=getHeight(root.left);int rightHight=getHeight(root.right);return Math.abs(leftHight-rightHight)<2&&isBalanced(root.left)&&isBalanced(root.right);}public int getHeight(TreeNode root){if(root==null){return 0;}int leftHight=getHeight(root.left);int rightHight=getHeight(root.right);return Math.max(leftHight,rightHight)+1;}
}

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

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

相关文章

封装el-upload组件,用于上传图片和视频

使用环境 vue3element-ui plus 需要根据后端返回结构修改的函数&#xff1a;onPreview onRemove onSuccess 组件使用 基本使用 源代码&#xff1a; <script setup> import AutoUploadFile from /components/auto-upload-file/index.vue function change(urls){console.…

Html批量转word工具2.1

2024年10月7日记录&#xff1a; 有客户反馈&#xff0c;2.0刚运行就提示转换完成 有问题就解决。正好国庆假期这几天有空&#xff0c;2.1版就出炉了。 2.1 更新记录&#xff1a; 修复了1个bug&#xff1a;刚运行就提示转换完成 下载地址&#xff1a;Html 转 word 批量处理工具…

一、Python(介绍、环境搭建)

一、介绍 Python 是一种高级编程语言&#xff0c;具有简洁易读的语法、丰富的库和强大的功能。Python是解释型语言&#xff0c;运行代码必须依赖安装好的解释器。Python目前存在两个版本&#xff1a;Python2、Python3&#xff08;主流使用&#xff09; 二、环境搭建 1.安装P…

智能家居有哪些产品?生活中常见的人工智能有哪些?

智能家居有哪些产品? 1、智能照明设备类&#xff1a;智能开关、智能插座、灯控模块、智能空开、智能灯、无线开关。 2、家庭安防类&#xff1a;智能门锁、智能摄像机、智能猫眼、智能门铃。 3、智能传感器类&#xff1a;烟雾传感器、可燃气体传感器、水浸传感器、声光报警器…

小程序-全局数据共享

目录 1.什么是全局数据共享 2. 小程序中的全局数据共享方案 MboX 1. 安装 MobX 相关的包 2. 创建 MobX 的 Store 实例 3. 将 Store 中的成员绑定到页面中 4. 在页面上使用 Store 中的成员 5. 将 Store 中的成员绑定到组件中 6. 在组件中使用 Store 中的成员 1.什么是全…

Python 语言学习——应用1.2 数字图像处理(第二节,变换)

目录 1.基础知识 1.图像几何变换概念 2.图像几何变换方式 3.插值运算 4.几何变换步骤 2.各类变换 1.位置变换 2.形状变换 3.代数运算 3.实战演练 1.基础知识 1.图像几何变换概念 在图像处理过程中&#xff0c;为了观测需要&#xff0c;常常需要对 图像进行几何变换&am…

Kali或Debian系统安装JDK1.8保姆级教程

一、下载JDK1.8 先到Oracle的官网下载JDK1.8 Java Archive | Oraclehttps://www.oracle.com/java/technologies/downloads/archive/Java Archive Downloads - Java SE 8

【springboot】整合沙箱支付

目录 1. 配置沙箱应用环境2. 配置springboot项目1. 引入依赖2. 配置文件注册下载ngrok 3. 创建支付宝支付服务类4. 支付界面模板5. 控制类实现支付6. 测试 1. 配置沙箱应用环境 使用支付宝账号登录到开放平台控制台。 使用支付宝登录后&#xff0c;看到以下页面&#xff0c;下…

云计算身份认证与访问控制(Cloud Computing Identity Authentication and Access Control)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

AHT10原理讲解(I2C驱动)-基于江科大源码开发

一、原理图 根据数据手册中的要求&#xff08;以上两图&#xff09;&#xff0c;可以看出SDA和SCL接主芯片的引脚就可以&#xff0c;但是注意我们在接的过程中&#xff0c;给了两个上拉电阻。 上拉电阻的作用&#xff1a; 提高抗干扰能力&#xff1a;适当的上拉电阻值可以帮助…

论文阅读笔记-LogME: Practical Assessment of Pre-trained Models for Transfer Learning

前言 在NLP领域,预训练模型(准确的说应该是预训练语言模型)似乎已经成为各大任务必备的模块了,经常有看到文章称后BERT时代或后XXX时代,分析对比了许多主流模型的优缺点,这些相对而言有些停留在理论层面,可是有时候对于手上正在解决的任务,要用到预训练语言模型时,面…

数据库三大范式

第一范式&#xff08;1NF&#xff09; 确保每个列中的数据是不可再分的。即&#xff0c;每个列只能包含一个值&#xff0c;而不是一个列表或数组。 每个列有多个数据的要拆成多个表。 错误&#xff1a; 正确&#xff1a; 第二范式 &#xff08;2NF&#xff09; 在第一范式的基…

探索Spring Boot:实现“衣依”服装电商平台

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…

数据结构与算法——Java实现 30.合并多个有序链表 小顶堆实现

后来我们都走了很久&#xff0c;远到提及往事时&#xff0c; 总会加上once upon a time —— 24.10.6 23. 合并 K 个升序链表 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 示例 1&#xff1…

【EXCEL数据处理】000010 案列 EXCEL文本型和常规型转换。使用的软件是微软的Excel操作的。处理数据的目的是让数据更直观的显示出来,方便查看。

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【EXCEL数据处理】000010 案列 EXCEL单元格格式。EXCEL文本型和常规型转…

推荐一个可以把PDF样本册转换为翻页电子书的网站

​随着互联网的普及&#xff0c;越来越多的企业和个人开始意识到线上展览的重要性。如何将实体样本册转化为线上版本&#xff0c;让更多人了解和欣赏自己的产品与服务&#xff1f; 一、网站简介 这款PDF样本册免费上传网站名为“FLBOOK”&#xff0c;致力于为广大用户提供便捷…

构建 10 万卡 GPU 集群的技术挑战

构建 10 万卡 GPU 集群的技术挑战 摘要 揭示AI训练集群关键基础设施挑战&#xff0c;探讨突破现有AI瓶颈的必要性与10万GPU集群&#xff08;如OpenAI、Meta&#xff09;建设所面临挑战与需求。 构建网络拓扑&#xff0c;需权衡多层交换机成本、带宽与维护。本文对比Ethernet与…

【IEEE PDF eXpress】格式不对

目录 一、问题二、解决方法 一、问题 word的文档&#xff0c;用IEEE PDF eXpress网站生成pdf后&#xff0c;提交论文出现错误&#xff1a; Document validation failed due to the following errors: Content exceeds IEEE template margins for its format (Page 1:Bottom).…

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习04(环境准备)

4 创建docker容器 4.1创建网络 [rootlocalhost wutool]# docker network create -d macvlan --subnet192.168.137.0/24 --gateway192.168.137.2 --ip-range192.168.137.0/24 -o parentens33 nat 52af11381bfd655d175e4168265b2a507793e8fe48f119db846949ffd4dd27de [rootlocal…