java数据结构_二叉树_5.5
2.7 二叉树的相关操作
1. size方法 获取二叉树元素个数
思路:遍历思路,在前面文章中,前序 中序 后序遍历的时候,会把树中的所有结点遍历一次。可以添加一个计数器,遍历一个结点就加一次。
于是有如下代码:
public int size = 0; //定义一个成员变量size
public int nodeSize(TreeNode root) {if(root == null) return 0;size++;nodeSize(root.left);nodeSize(root.right);return size;
}
在IDEA中测试符合预期,但还是思考,上面的方法,也没有利用到这个方法的返回值。
换个角度,以子问题的思路来思考:要算当前root总共有多少个结点,其实就等于:当前root结点的左子树的结点个数 + 当前root结点的右子树的结点个数 + 1。
于是有如下代码:
public int nodeSize(TreeNode root) {int size = 0;if(root == null) return size;int leftSize = nodeSize(root.left);int rightSize = nodeSize(root.right);return leftSize + rightSize + 1;
}
该代码仍是化大树为小树,逐个解决子问题过程。
下图为部分递归过程,注意先递出去,再归回来

2. getLeafSize方法 得到二叉树叶子结点个数
先回忆概念,叶子结点也就是度为0的结点,也就是左右子树均为null的结点
于是有如下代码:
public int leaveSize = 0;public int getLeaveSize(TreeNode root) {if(root == null) return leaveSize;if(root.left == null && root.right == null) {leaveSize++;}getLeaveSize(root.left);getLeaveSize(root.right);return leaveSize;
}
同样的,也可以换一种子问题思路来考虑,要求当前root有多少个叶子结点,其实就是相当于求root左树的叶子结点的个数 + root右树的叶子结点的个数
于是有如下代码:
public int getLeaveSize(TreeNode root) {if(root == null) return 0;if(root.left == null && root.right == null) {return 1;}int leftLeaveSize = getLeaveSize(root.left);int rightLeaveSize = getLeaveSize(root.right);return leftLeaveSize + rightLeaveSize;
}
下图为部分递归过程,注意先递出去,再归回来

3. getKLevelNodeCount方法 获得第K层的结点的个数
root这棵树的第K层的结点的个数 = root.left第K - 1层的结点的个数 + root.right第K - 1层的结点的个数

如上图,若像求第3层的结点的个数,就等于求root(A).left(B)的第二层 + root(A).right(C)的第二层
于是有代码如下:
public 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. getHeight方法 获得二叉树高度
分析:整棵树的高度 = root左树的高度 + root右树的高度 + 1
于是有如下代码:
public int getTreeHeight(TreeNode root) {if(root == null) return 0;int leftTreeHeight = getTreeHeight(root.left);int rightTreeHeight = getTreeHeight(root.right);return leftTreeHeight > rightTreeHeight ? leftTreeHeight + 1 : rightTreeHeight + 1;
}
如下图为递归的部分过程

5. find方法 检查二叉树是否存在值为val的元素
find方法,对比之前的数据结构查找,也是在整个数据结构中遍历一次,定义一个标识,如果有,就标识为ture,否则为false。
于是有如下代码:补充:下面代码是使用先序遍历来进行的查找
public boolean find(TreeNode root, char value) {if(root == null) return false;if(root.val == value) {return true;}boolean leftFlg = find(root.left, value);if(leftFlg == true) {return true;}boolean rightFlg = find(root.right, value) {return true;} return false;
}
相关文章:
java数据结构_二叉树_5.5
2.7 二叉树的相关操作 1. size方法 获取二叉树元素个数 思路:遍历思路,在前面文章中,前序 中序 后序遍历的时候,会把树中的所有结点遍历一次。可以添加一个计数器,遍历一个结点就加一次。 于是有如下代码࿱…...
Deepseek-R1推理模型API接入调用指南 ChatGPT Web Midjourney Proxy 开源项目接入Deepseek教程
DeepSeek-R1和OpenAI o1模型都属于推理任务模型,两个模型各有优点:DeepSeek-R1 在后训练阶段大规模使用了强化学习技术,在仅有极少标注数据的情况下,极大提升了模型推理能力。在数学、代码、自然语言推理等任务上,性能…...
计算机网络(4)TCP断开
1、TCP 断开连接四次挥手流程 TCP 断开连接是通过四次挥手方式。双方都可以主动断开连接,断开连接后主机中的「资源」将被释放。 2、为什么 TIME_WAIT 等待的时间是 2MSL? 3、为什么需要 TIME_WAIT 状态? 4、拔掉网线后, 原本的 …...
科技云报到:科技普惠潮流渐起,“开源”将带我们走向何方?
科技云报到原创。 开源决定软件未来,已成为全球技术和产业创新的主导模式之一。“开源”思想的诞生,可以说是计算机发展史中极具理想主义和浪漫主义色彩的一页,是科技自由与技术极客思想的延伸。 数字化浪潮奔涌,从软件开发的底…...
【论文笔记】On Generative Agents in Recommendation
论文信息 标题: On Generative Agents in Recommendation 会议: SIGIR 24 —— CCF-A 作者: An Zhang, Yuxin Chen, Leheng Sheng 文章链接: On Generative Agents in Recommendation 代码链接: On Generative Agents…...
使用 Spring Boot 和 Canal 实现 MySQL 数据库同步
文章目录 前言一、背景二、Canal 简介三、主库数据库配置1.主库配置2.创建 Canal 用户并授予权限 四.配置 Canal Server1.Canal Server 配置文件2.启动 Canal Server 五.开发 Spring Boot 客户端1. 引入依赖2. 配置 Canal 客户端3. 实现数据同步逻辑 六.启动并测试七.注意事项八…...
vue3 在element-plus表格使用render-header
在vue2中 element表格render-header 源码是有返回h()函数的 在vue3 element-plus 表格源码 render-header函数没有返回h函数了 所以需要用render-header方法中创建虚拟DOM节点的话需要引用h方法 <el-table-column header-align"right" align"right" …...
算法——结合实例了解Minimax算法(极小化极大算法)
计算机科学中最有趣的事情之一就是编写一个人机博弈的程序。有大量的例子,最出名的是编写一个国际象棋的博弈机器。但不管是什么游戏,程序趋向于遵循一个被称为Minimax算法,伴随着各种各样的子算法在一块。本篇将简要介绍 minimax 算法&#…...
使用 DeepSeek 生成商城流程图
步骤 1.下载 mermaid 2.使用 DeepSeek 生成 mermaid 格式 3.复制内容到 4.保存备用。 结束。...
什么是GraphQL?
如果你在寻找漏洞利用方式,请参考下面的文章 GraphQL API 漏洞 |网络安全学院 GitHub - swisskyrepo/PayloadsAllTheThings: A list of useful payloads and bypass for Web Application Security and Pentest/CTF GraphQL 查询(Query) GraphQL 既不是…...
Spring Boot 的约定优于配置,你的理解是什么?
Spring Boot 的“约定优于配置”:开发效率的革命性提升 在软件开发中,开发者常常需要花费大量时间编写繁琐的配置文件,尤其是在传统的 Java EE 或 Spring 框架中。而 Spring Boot 通过“约定优于配置”(Convention Over Configur…...
C#开源大型商城系统之B2B2C+O2O一体化_OctShop
一、应用背景与引言 在当今数字化商业的浪潮中,电子商务平台的构建成为众多企业拓展业务、提升竞争力的关键举措。C# 语言以其强大的功能、高效的性能以及良好的开发框架支持,在商城系统开发领域占据着重要地位。独立开源的大型 C# 商城系统,…...
gitte远程仓库修改后,本地没有更新,本地与远程仓库不一致
问题 :gitte远程仓库修改后,本地没有更新,本地与远程仓库不一致 现象: [cxqiZwz9fjj2ssnshikw14avaZ rpc]$ git push Username for https://gitee.com: beihangya Password for https://beihangyagitee.com: To https://gitee.c…...
【对比】Pandas 和 Polars 的区别
Pandas vs Polars 对比表 特性PandasPolars开发语言Python(Cython 实现核心部分)Rust(高性能系统编程语言)性能较慢,尤其在大数据集上(内存占用高,计算效率低)极快,利用…...
el-input无法输入0.0001的小数,自动转换为0在vue3中的bug
今天遇到个bug,el-input中只能输入0.1或者输入0.1再加上00成为0.001,不能直接输入0.001,否则自动转换为0。需要去掉 v-model.number后面的 .number 源代码: <el-table-column label"实发数量" width"120"…...
Ubuntu 下 systemd 介绍
系列文章目录 Linux内核学习 Linux 知识(1) Linux 知识(2) WSL Ubuntu QEMU 虚拟机 Linux 调试视频 PCIe 与 USB 的补充知识 vscode 使用说明 树莓派 4B 指南 设备驱动畅想 Linux内核子系统 Linux 文件系统挂载 QEMU 通过网络实现…...
BERT文本分类(PyTorch和Transformers)畅用七个模型架构
(PyTorch)BERT文本分类:七种模型架构 🌟 1. 介绍 使用BERT完成文本分类任务(如情感分析,新闻文本分类等等)对于NLPer已经是很基础的工作了!虽说已迈入LLM时代,但是BERT…...
两步在 Vite 中配置 Tailwindcss
第一步:安装依赖 npm i -D tailwindcss tailwindcss/vite第二步:引入 tailwindcss 更改配置 // src/main.js import tailwindcss/index// vite.config.js import vue from vitejs/plugin-vue import tailwindcss from tailwindcss/viteexport default …...
【vmware虚拟机安装教程】
以下是在VMware Workstation Pro上安装虚拟机的详细教程: 准备工作 下载VMware Workstation Pro 访问VMware官网下载并安装VMware Workstation Pro(支持Windows和Linux系统)。安装完成后,确保已激活软件(试用版或正式…...
文字转语音(三)FreeTTS实现
项目中有相关的功能,就简单研究了一下。 说明 FreeTTS 是一个基于 Java 的开源文本转语音(TTS)引擎,旨在将文字内容转换为自然语音输出。 FreeTTS 适合对 英文语音质量要求低、预算有限且需要离线运行 的场景,但若需…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
