60、二叉搜索树的第k个结点

一、题目

给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。

二、解法

 1 package algorithm7;
 2 
 3 public class KthNode62 {
 4     public static void main(String[] args) {
 5         KthNode62 kth = new KthNode62();
 6         TreeNode t1 = new TreeNode(5);
 7         TreeNode t2 = new TreeNode(3);
 8         TreeNode t3 = new TreeNode(7);
 9         TreeNode t4 = new TreeNode(2);
10         TreeNode t5 = new TreeNode(4);
11         TreeNode t6 = new TreeNode(6);
12         TreeNode t7 = new TreeNode(8);
13         t1.left = t2;
14         t1.right = t3;
15         t2.left = t4;
16         t2.right = t5;
17         t3.left = t6;
18         t3.right = t7;
19         TreeNode t = kth.KthNode(t1,8);
20         System.out.println(t.val);
21     }
22     int index = 0;//计数器
23     //用中序遍历,左 根 右
24     public  TreeNode KthNode(TreeNode pRoot, int k)
25     {
26         if(pRoot != null){
27             TreeNode node = KthNode(pRoot.left,k);//
28             if(node != null)//表示找到了结点
29                 return node;
30             
31             index++;//
32             if(index == k)
33                 return pRoot;//找到了
34             
35             node = KthNode(pRoot.right,k);//
36             if(node != null)//表示找到了结点
37                 return node;
38         }
39         return null;//遍历完了 返回空 或者该结点为空
40     }
41 }

 

转载于:https://www.cnblogs.com/fankongkong/p/7462149.html

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

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

相关文章

机器学习算法3

文章目录转换器与估计器分类算法-K近邻算法一个例子弄懂k-近邻计算距离公式sklearn.neighborsMethodk近邻实例k-近邻算法案例分析对Iris数据集进行分割对特征数据进行标准化朴素贝叶斯概率论基础联合概率与条件概率联合概率条件概率如果每个事件相互独立拉普拉斯平滑sklearn朴素…

嵌入式杂谈之文件系统

文件系统可以说是嵌入式中的一大块,也是绕不过的一部分。之前我对文件系统认知一直停留在在U盘格式的理解上,直到接触了嵌入式Linux才发现这里面大有文章,以Linux启动挂载根文件系统为例,这个文件系统可以是真正的存储设备上的文件…

qtscrcpy自定义按键_按键映射说明.md

# 自定义按键映射说明按键映射文件为json格式,新增自己的按键映射文件需要放在keymap目录中才可以被QtScrcpy识别。按键映射文件的具体编写格式下面会介绍,也可以参考自带的按键映射文件。## 按键映射脚本格式说明### 通用说明- 按键映射中的坐标位置都是…

docker发布spring cloud应用

原文地址:http://www.cnblogs.com/skyblog/p/5163691.html 本文涉及到的项目: cloud-simple-docker:一个简单的spring boot应用 Docker是一种虚拟机技术,准确的说是在linux虚拟机技术LXC基础上又封装了一层,可以看成是…

Linux块设备IO子系统

块设备是Linux三大设备之一,其驱动模型主要针对磁盘,Flash等存储类设备,块设备(blockdevice)是一种具有一定结构的随机存取设备,对这种设备的读写是按块(所以叫块设备)进行的,他使用缓冲区来存放…

机器学习算法4

文章目录精确率和召回率分类器性能评估混淆矩阵分类模型sklearn.metrics.classification_report决策树认识决策树优缺点信息的度量和作用信息熵决策树划分依据之信息增益api实战method决策树优缺点分析实例随机森林集成方法(分类)之随机森林学习算法skle…

unity怎么制作云飘动_Unity 如何制作星空粒子效果?

本经验介绍在Unity游戏引擎中使用Particle System,如何使用自带资源,快速制作星空的粒子特效。工具/原料Unity方法/步骤1:首先,新建一个场景,如果有自己的天空盒资源的话,在Window->Lighting下设置下天空(默认天空盒…

[芦半山]Android native分析工具ASAN和HWASAN原理解析

ASAN和HWASAN原理解析由于虚拟机的存在,Android应用开发者们通常不用考虑内存访问相关的错误。而一旦我们深入到Native世界中,原本面容和善的内存便开始凶恶起来。这时,由于程序员写法不规范、逻辑疏漏而导致的内存错误会统统跳到我们面前&am…

线性回归,岭回归

文章目录线性回归回归算法回归算法之线性回归优缺点损失函数梯度下降算法LinearRegression属性加入交叉验证线性回归案例分析波士顿房价预测5.性能评测案例欠拟合与过拟合解决过拟合的方法回归算法之岭回归sklearn.linear_model.Ridge方法属性案例分析线性回归 回归算法 回归…

resnet152训练_Resnet-152的图像预处理

152层的 Resnet的图片输入尺寸为224*224,那对于大多数情况,图片的分辨率都是大于这个数值,那么该如何把图片的尺寸裁剪到这样一个尺寸,又如何进行数据增强呢?第一,调整尺寸(Rescaling)先将图片较短的那条边…

重处理报表的坑

1.创建报表时,会记录符合条件的FileID 2.重处理报表时,不会根据条件去找符合条件的数据;而是根据原先的FileID去生成; 意味着新增了数据,原先的报表重处理也增加不了数据...必须要重新生成报表 转载于:https://www.cnb…

C 语言中,x += 5 == 4 是什么意思?

#讨论这个有意义吗?这个是在知乎上看到的一个问题,评论挺多的。其中有人提到,研究这个东西有什么用?编程的时候我们不能这么写的。我记得在大学的时候,我们的副院长给我们上课,就给我们提到,要习…

UEditor编辑器第一次赋值失败的解决方法

网上查了很多方式都不是很好用,最后想到了这样的处理方式 首先在js中定义一个全局变量 var ue null; 然后在初始化显示编辑器的时候js这样写 if (ue null) { ue new baidu.editor.ui.Editor(); ue.render(email_template); } ue.setContent("11111");…

linux命令deploy_Linux deploy 使用教程

Linux deploy是一个可以快速在Android设备上安装运行Linux操作系统的App,遵循GPLv3协议。我已经用了一段时间,讲讲我的使用经验,以下Linux deploy我简写为Ld。首先下载安装Ld,运行Ld后进入了一个全黑的界面,其实是个自…

一次深刻的面试经历

没有吐槽,没有埋怨,没有鸡汤,纯分享。近期我到某名牌房地产公司参加了一次面试,面试岗位是企划主管,我把面试经历跟大家简单分享一下。面试背景:我一直从事广告传媒工作,在工作中服务过不同的客…

帆软报表嵌入python程序_在线报表FineReport中如何进行嵌入式部署

2.部分复制也可以选择性的只复制必要性文件至已有工程中。必须复制的文件fr-server-7.1.jar:包含了报表服务的所有功能,必须拷贝至WEB-INF\lib下;fr-third-7.1.jar:包含了报表服务引用的第三方插件,必须拷贝至WEB-INF\…

android ——多线程编程

1、定义一个线程只需要新建一个类继承自Thread。然后重写run()方法,并在里面编写耗时逻辑即可: class MyThread extends Thread{public void run(){//处理具体的逻辑}} 启动的时候只需要new出MyThread的实例,然后调用它…

Linux内核设计的艺术

Linux内核设计的艺术这本书是我认为对Linux内核描述非常优秀的书籍。书籍中描述了内核启动的流程,内核运行的机理,内存管理,进程管理等等。#书籍目录第1章 从开机加电到执行main函数之前的过程11.1 启动BIOS,准备实模式下的中断向…

sklearn

文章目录机器学习机器怎样学习机器学习的两种方式用处监督学习三要素监督学习概念与数学形式统计学习三要素模型策略两大策略监督学习三大问题分类问题精确率与召回率标注问题回归问题无监督学习无监督学习主要方法无监督学习之聚类分析用途高斯混合模型密度分布估计协方差估计…

gtp6 linux 启动_Win10更新后导致双系统(LinuxWindows)开机引导失败出现grub rescue的修复办法...

Windows10更新有一定几率会破坏grub,找不到grub引导文件,所以我们要让它找到引导文件。当屏幕上提示:grub resume> 时。1、set命令查看当前grub引导指向哪个盘。grub resume> set显示结果,例如,cmdpath(hd0,gtp2)/EFI/parro…