【Java数据结构 -- 二叉树的基本操作】

二叉树的基本操作

  • 1.获取树中节点的个数
    • 1.1 计数器递归的思路
    • 1.2 子问题思路:
  • 2. 获取叶子个数
  • 3. 获取第k层节点的个数
  • 4.获取二叉树的高度
  • 5.检测值为value的元素是否存在

1.获取树中节点的个数

思路:整棵树的节点个数 = 左子树的节点个数+右子树的节点个数+根本身一个

1.1 计数器递归的思路

定义一个计数器nodesize,先++然后遍历二叉树左子树和右子树。

	public int nodesize;int size(TreeNode root) {if(root == null) {return 0;}nodesize++;size(root.left);size(root.right);return nodesize;}

1.2 子问题思路:

整棵树的节点个数 =左子树的节点个数+右子树的节点个数+根本身一个

	int size2(TreeNode root) {if (root == null) {return 0;}return size2(root.left) + size2(root.right) + 1;}

2. 获取叶子个数

思路:整棵树的叶子 = 左子树的叶子+右子树的叶子

    int getLeafNodeCount(TreeNode root) {if (root == null) {return 0;}if(root.left ==null && root.right == null) {return 1;}return getLeafNodeCount(root.left) + getLeafNodeCount(root.right);}

3. 获取第k层节点的个数

思路:整棵树的第k层多少个节点 = 左子树的第k-1个节点 + 右子树的第k-1层节点;
如 k = 3 A 这颗树的第三层 = A左树(B)的第二层 + A右树(C)的第二层;
第一层只有一个节点 B左树的第一层+B右树的第一层 C左树的第一层+右第一层

    int getKLevelNodeCount(TreeNode root,int k) {if (root == null) {return 0;}if(k == 1) {return 1;}return getKLevelNodeCount(root.left,k-1) +getKLevelNodeCount(root.right,k-1);}

4.获取二叉树的高度

思路:整棵树的高度 = 左子树的高度 和右子树的高度的最大值 + 1

    int getHeight(TreeNode root){if(root == null) {return 0;}int leftHeight = getHeight(root.left);int rightHeight = getHeight(root.right);return leftHeight > rightHeight ? leftHeight + 1:rightHeight + 1;}

5.检测值为value的元素是否存在

思路:按照根 - 左 - 右的前序遍历进行遍历,1.是否为空树;2.根的值是不是;3.左子树;4.右子树;

    TreeNode find(TreeNode root,char val) {if(root == null){return null;}if(root.val == val) {return root;}TreeNode ret1 = find(root.left,val);if (ret1 != null) {return ret1;}TreeNode ret2 = find(root.right,val);if (ret2 != null) {return ret2;}return null;}

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

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

相关文章

休息日的思考与额外题——双指针、原地哈希day28

文章目录 前言一、11. 盛最多水的容器二、41. 缺失的第一个正数三、42. 接雨水总结 前言 一个本硕双非的小菜鸡,备战24年秋招,计划二刷完卡子哥的刷题计划,加油! 二刷决定精刷了,于是参加了卡子哥的刷题班&#xff0c…

32单片机基础:旋转编码器计次

接线图如上图所示。 我们初始化一下PB0和PB1两个GPIO口外设中断,当然,这里只初始化一个外部中断也能完成功能的对于编码器而言,下图所示为正转的波形。如果把一相的下降沿用作触发中断,在中断时刻读取另一相的电平,正…

【EXCEL】SUMIFS多次条件筛选数据

问题案例 有如下两个工作表(Sheet1和Sheet2): 在sheet1中的C2行获得一个结果(项目1的1月收入),是对sheet2中的A列筛选出“项目1”B列筛选出“202401”而获得对应C列的结果。借助excel的公式如何实现。 S…

【算法科目】2024年第二届全国大学生信息技术认证挑战赛 题解

图像压缩 曾经看到过,这是一道洛谷原题,很可惜我没做过,有点看不懂就没尝试。 原题链接:B3851 [GESP202306 四级] 图像压缩 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 因数分解 直接枚举就行了,从2开始找因子&a…

Spring:EnclosingClass工具类分辨

Spring:EnclosingClass工具类分辨 1 前言 通过Spring的工具分辨EnclosingClass类。 测试类如下: package com.xiaoxu.test.enclosingClass;/*** author xiaoxu* date 2024-01-18* java_demo2:com.xiaoxu.test.enclosingClass.Outter*/ public class …

微信小程序(四十六)登入界面-进阶版

注释很详细,直接上代码 上一篇 此文使用了vant组件库,没有安装配置的可以参考此篇vant组件的安装与配置 新增内容: 1.手机号与验证码格式验证 2.验证码的网络申请和校验 wechat-http模块在好几篇以前已经讲了咋安装的,不记得的友…

为什么要用Python?

为什么要用Python? Python简单易用:提供大量的简单易用数据结构和内置库,语法结构也很简单易读,不需要使用括号来进行代码块分组,也不需要预声明变量或参数。Python开发效率高:简单易用的前提下&#xff0…

vue3输入单号和张数,自动生成连号的单号

需求&#xff1a; 输入连号事件&#xff0c;需要在表格中输入物流单号&#xff0c;物流号码&#xff0c;生成的数量&#xff0c;名称&#xff0c;点击确定自动生成固定数量的连号物流单号 1.页面布局 <div><el-button type"primary" size"default&quo…

最新版阿里云Linux CentOS7 ecs-user用户安装Mysql8详细教程(超简单)

经过两天的踩坑后&#xff0c;终于成功安装&#xff0c;并找到了最快捷的安装方式。接下来就由我来给大家介绍不踩坑安装大法&#xff01; 一、下载Mysql 首先前往Mysql官网下载 MySQL官方下载地址 第一步&#xff0c;选择安装包&#xff0c;这是最关键的一步&#xff0c;选错安…

使用query请求数据出现500的报错

我在写项目的时候遇到了一个问题&#xff0c;就是在存商品id的时候我将它使用了JSON.stringify的格式转换了&#xff01;&#xff01;&#xff01;于是便爆出了500这个错误&#xff01;&#xff01;&#xff01; 我将JSON.stringify的格式去除之后&#xff0c;它就正常显示了&…

昇腾ACL应用开发之硬件编解码dvpp

1.前言 在我们进行实际的应用开发时&#xff0c;都会随着对一款产品或者AI芯片的了解加深&#xff0c;大家都会想到有什么可以加速预处理啊或者后处理的手段&#xff1f;常见的不同厂家对于应用开发的时候&#xff0c;都会提供一个硬件解码和硬件编码的能力&#xff0c;这也是抛…

Docker 命令详解:容器、镜像、网络和数据卷管理

文章目录 1. docker run2. docker pull3. docker images4. docker ps5. docker stop6. docker rm7. docker commit8. docker exec9. docker logs10. docker network11. docker volume12. docker save13. docker load14. docker tag15. docker search16. docker diff17. docker …

sql注入之sqli-labs/less-3 单引号加括号闭合

输入单引号试探&#xff1a; id1 报错信息里面出现 ) 说明闭合符合里面还有个 ) 再次试探&#xff1a;id1 ) order by 3 -- 查看回显位置&#xff1a; id-1%20%27)%20union%20select%201,2,3%20-- 查看数据库&#xff1a; id-1%20%27)%20union%20select%201,2,database()%2…

Kerberos协议攻防之黄金票据控制整个公司电脑

&#x1f449;重点内容&#xff1a; 1、网络认证、本地认证、域认证的优略势 2、域认证之Kerberos协议的认证流程详解 3、TGT、Krbtgt、KDC、TGS搞懂这些绕口的概念 4、深入理解黄金票据攻击Golden Ticket Attack 5、实战&#xff01;通过黄金票据控制内网中所有的电脑

DC-2靶机详解

写写自己打DC-2的过程 使用工具 kali DC-2的靶机下载地址为&#xff1a;https://www.vulnhub.com/entry/dc-2,311/ 环境配置。 Kali和DC-2都设置为NAT模式&#xff0c;都为仅主机模式也可以。 信息收集 arp-scan -l nmap -sn 192.168.236.0/24 获取靶机ip&#xff1a;192.16…

基于springboot+vue的工厂车间管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

【Linux】输入系统应用

# 前置知识 (1)输入子系统分为三层&#xff0c;分别是事件处理层、核心层、设备驱动层&#xff1b; (2)鼠标移动、键盘按键按下等输入事件都需要通过设备驱动层→核心层→事件处理层→用户空间&#xff0c;层层上报&#xff0c;直到应用程序; 事件处理层 (1)事情处理层主要是负…

【八】【SQL】子查询和where

显示与SMITH同一部门的员工 mysql> select *from emp where enameSMITH; ----------------------------------------------------------------------- | empno | ename | job | mgr | hiredate | sal | comm | deptno | --------------------------------…

Python调用C,python call c,pybind11

文章目录 前言1.将pybind11 clone至当前项目下的extern目录下2.在CmakeLists.txt中将pybind11项目包含3.接口cpp文件格式4.编译5.导入Python使用6.性能比较pybind11项目地址 前言 通过https://github.com/pybind/pybind11项目实现Python调用C/C代码 实现步骤 1.将pybind11 cl…

腾讯云4核8G服务器申请费用多少?性能如何?支持几个人?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…