二叉树的基本操作

二叉树的基本操作

前文对二叉树的递归遍历作了一定的介绍,本文中我们继续深入理解递归,实现二叉树的基本操作。

1、获取树中结点个数

对于这个问题,我们有两种解决的思路。

1、子问题思路

我们通过结点左字树和右字树的结点总数加1来计算总结点数,而左右子树又可以通过这个方法来拆分成求子树的子树的结点总数的问题,直到遇到叶子结点,递进过程结束,开始回归。代码如下:

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

2、遍历思路

设置非成员变量nodeSize来计数吗,遇到结点就让nodeSize自增。

 public static int nodeSize;public void size(TreeNode root) {if(root == null) {return;//空树是不需要遍历的}nodeSize++;size(root.left);size(root.right);}

2、获取叶子结点个数

相信通过对以上递归的理解,可以想出如何获取叶子结点的个数。唯一需要注意的是。叶子结点的判断条件:左孩子引用与右孩子引用为空

public int leafSize;public void getLeafNodeCount(TreeNode root) {if(root == null) {return;}if(root.left == null && root.right == null) {leafSize++;}getLeafNodeCount(root.left);getLeafNodeCount(root.right);}

3、获取第K层节点的个数

这个题目相对于上面的题目,参数多了一个k,因此,在递归时,要考虑传入的是k经变化后的值。同时,递归的条件也要发生改变,应该当k的值为1时,停止递进。代码如下:

 public int getKLevelNodeCount(TreeNode root,int k) {if(root == null) {return 0;}if(k == 1) {return 1;//就是当前结点,个数为1}return getKLevelNodeCount(root.left,k-1)+getKLevelNodeCount(root.right,k-1);//向下推移1层,k--}

4、获取二叉树的高度

对于这个问题,我们也是利用这个方法的自调用,利用递归实现。值得思考的是,二叉树的高度由最下层的结点的高度决定,因此我们要取出左右子树中深度中的较大值,再加上1(根结点)得到二叉树的高度。

 public int getHeight(TreeNode root) {if(root == null) {return 0;}int leftHeight = getHeight(root.left);int rightHeight = getHeight(root.right);return Math.max(leftHeight,rightHeight) + 1;}

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

查找十分简单,按照根左右顺序递归查找即可。

public TreeNode find(TreeNode root,int val) {if(root == null) return null;if(root.val == val) return root;TreeNode leftVal = find(root.left,val);if(leftVal != null) {return leftVal;}TreeNode rightVal = find(root.right,val);if(rightVal != null) {return rightVal;}return null;}

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

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

相关文章

机器视觉检测设备在连接器外观缺陷检测中的应用

作为传输电流或信号连接两个有源器件的器件,连接器被广泛应用于各个行业,从手机、平板、电脑,到冰箱、空调、洗衣机,再到汽车、国防、航空,处处是它的所在。每个电子产品少了连接器将无法运作,因此&#xf…

20个超实用的JavaScript高级技巧

1.Intersection Observer: 用途: 监听元素与其父元素或视口的交叉情况。使用场景: 懒加载图片、实现无限滚动。 const callback (entries, observer) > {entries.forEach(entry > {if (entry.isIntersecting) {console.log(Element is in the v…

Python——面向对象案列

1. class User(object):#重写__int__初始化方法,该方法用来初始化属,在构建方法的时候,这个方法会自动触发,用来初始化属性def __init__(self): #name “” 这是一个局部变量#self类似指针 this#self.name类的属性print("构…

计算机网络-甘晴void学习笔记

计算机网络 计科210X 甘晴void 202108010XXX 文章目录 计算机网络期中复习1计算机网络和因特网1.1 因特网1.2 网络边缘1.3 网络核心1.4 分组交换的时延/丢包和吞吐量1.5 协议层次与服务模型 2 应用层原理2.1 应用层协议原理2.2 Web和Http2.3 因特网中的电子邮件2.4 DNS&#x…

K8S--部署Nacos

原文网址:K8S--部署Nacos-CSDN博客 简介 本文介绍K8S部署Nacos的方法。Nacos版本是:2.2.3。 部署方案 本文为了简单,使用此部署方式:使用本地pvconfigmap,以embedded模式部署单机nacos。以nodePort方式暴露端口。 …

linux Vim编辑器使用以及文件权限修改,kill process

选择编辑器:select-editor vim命令 基本操作 1.vim 文件名 :进入一般模式(不能输入) 2.按下 i 从一般模式,进入到插入编辑模式 3.按下esc从插入模式,退出到一般模式 4.输入:wq,退出编辑。 普通模式下&…

vectorCast——Probe point 功能实现故障注入,局部变量打印,断点调试。

选择一个测试用例,选择coverage窗口进行查看。点击edit probe point,如图所示绿色的小圆圈。选代码中选择需要打断点的地方进行点击。黑色的小圆点都可以选。点击黑色小圆点,小圆点变绿,表示打断点成功。此时就可以根据自己的需求在打断点的位置编写一些C语言的命令语句。点…

QT+OSG/osgEarth编译之八十:ive+Qt编译(一套代码、一套框架,跨平台编译,版本:OSG-3.6.5插件库osgdb_ive)

文章目录 1、osgdb_ive介绍2、文件分析3、pro文件4、编译实践1、osgdb_ive介绍 通过osgdb_ive,OpenSceneGraph开源库能方便地读取ive格式的三维文件。 ive(Interchangeable Virtual Environment)是一种三维图形数据交换格式,主要用于虚拟现实和增强现实领域的场景数据交…

线程同步--生产者消费者模型--单例模式线程池

文章目录 一.条件变量pthread线程库提供的条件变量操作 二.生产者消费者模型生产者消费者模型的高效性基于环形队列实现生产者消费者模型中的数据容器基于生产者消费者模型实现单例线程池 一.条件变量 条件变量是线程间共享的全局变量,线程间可以通过条件变量进行同步控制条件…

ffmpeg 常用命令行详解

概述 ffmpeg 是一个命令行音视频后期处理软件 1. 裁剪命令 参数说明 -i 文件,orgin.mp3 为待处理源文件-ss 裁剪时间,后跟裁剪开始时间,或者开始的秒数-t 裁剪时间output.mp3 为处理结果文件 ffmpeg -i organ.mp3 -ss 00:00:xx -t 120 o…

c语言-位段

文章目录 前言一、位段是什么?1.1 位段的声明 总结 前言 本篇文章介绍c语言的位段。 一、位段是什么? 概念:c语言允许在一个结构体中以位为单位来指定其成员所占内存长度。 1.1 位段的声明 位段的声明格式为: struct struct_…

速盾网络:香港cdn免备案搭建网站好吗

随着互联网的发展,网站建设已经成为许多企业的必备工具。然而,在中国大陆地区,建立网站需要进行备案申请,这给部分企业带来了不小的困扰。为了解决这一问题,一些企业开始寻找免备案的解决方案,而香港CDN免备…

Webpack5入门到原理12:处理 Html 资源

1. 下载包 npm i html-webpack-plugin -D 2. 配置 webpack.config.js const path require("path"); const ESLintWebpackPlugin require("eslint-webpack-plugin"); const HtmlWebpackPlugin require("html-webpack-plugin");module.expo…

无刷电机学习-原理篇

一、无刷电机的优点 使用一项东西首先就要明白为什么要使用它,使用它有什么优点。与有刷电机相比无刷电机除了控制繁琐几乎全是优点。 1、应用范围广:家用电器(冰箱空调压缩机、洗衣机、水泵等)、汽车、航空航天、消费品工业自动…

4个值得使用的免费爬虫工具

在信息时代,数据的获取对于各行业都至关重要。而在数据采集的众多工具中,免费的爬虫软件成为许多用户的首选。本文将专心分享四款免费爬虫工具,突出介绍其中之一——147采集软件,为您揭示这些工具的优势和应用,助您在数…

【c语言】扫雷(上)

先开一个test.c文件用来游戏的逻辑测试,在分别开一个game.c文件和game.h头文件用来实现游戏的逻辑 主要步骤: 游戏规则: 输入1(0)开始(结束)游戏,输入一个坐标,如果该坐…

算法训练day17leetcode110平衡二叉树257二叉树的所有路径404左叶子之和

今日学习的文章和视频链接 https://www.bilibili.com/video/BV1GY4y1K7z8/?vd_source8272bd48fee17396a4a1746c256ab0ae https://programmercarl.com/0404.%E5%B7%A6%E5%8F%B6%E5%AD%90%E4%B9%8B%E5%92%8C.html#%E6%80%9D%E8%B7%AF 题目描述 给定一个二叉树,判…

Java Excel分割成许多小文件

最近在处理excel,数据很多,需要将excel拆分成许多小块,并保留原来的格式,于是写了该算法,并能保留原来的样式,使用很简单: Sheet splitSheet ExcelUtil.split(sheet, 0, 20, 5, 8); 传入开始…

nodejs前端项目的CI/CD实现(二)jenkins的容器化部署

一、背景 docker安装jenkins,可能你会反问,这太简单了,有什么好讲的。 我最近就接手了一个打包项目,它是一个nodejs的前端项目,jenkins已在容器里部署且运行OK。 但是,前端组很追求新技术,不…

中小企业股权质押融资(下)

股权质押融资的主要风险 由于股权资产的特殊性,较固定资产抵押和质押、第三方担保等方式,股权质押融资风险易受企业经营状况等因素的影响,主要包括股权价值下跌的风险、股权质押的道德风险、股权处置风险以及现行法律不完善导致的法律风险。…