Python实现查找二叉搜索树第k大的节点功能示例


Posted in Python onJanuary 24, 2019

本文实例讲述了Python实现查找二叉搜索树第k大的节点功能。分享给大家供大家参考,具体如下:

题目描述

给定一个二叉搜索树,找出其中第k大的节点

Python实现查找二叉搜索树第k大的节点功能示例

就是一个中序遍历的过程,不需要额外的数组,便利到节点之后,k减一就行。

代码1

class TreeNode:
  def __init__(self, x):
    self.val = x
    self.left = None
    self.right = None
class Solution:
  def __init__(self):
    self.k = 0
  def recursionKthNode(self, Root):
    result = None
    if result == None and Root.left:
      result = self.recursionKthNode(Root.left)
    if result == None:
      if self.k == 1:
        return Root
      self.k -= 1
    if result == None and Root.right:
      result = self.recursionKthNode(Root.right)
    return result
  def KthNode(self, Root, k):
    if Root == None:
      return None
    self.k = k
    return self.recursionKthNode(Root)
Root = TreeNode(5)
Root.left = TreeNode(3)
Root.left.left = TreeNode(2)
Root.left.right = TreeNode(4)
Root.right = TreeNode(7)
Root.right.left = TreeNode(6)
Root.right.right = TreeNode(8)
print(Solution().KthNode(Root,3).val)

output : 4

代码2

class TreeNode:
  def __init__(self, x):
    self.val = x
    self.left = None
    self.right = None
class Solution:
  def __init__(self):
    self.k = 0
  def InOrder(self, Root):
    ans = None
    if Root:
      if ans == None and Root.left:
        ans = self.InOrder(Root.left)  #往左遍历
      if ans == None and self.k == 1:
        ans = Root           #遍历到目标节点
      if ans == None and self.k != 1:   #没有遍历到目标节点,k--
        self.k -= 1
      if ans == None and Root.right:   #往右遍历
        ans = self.InOrder(Root.right)
    return ans
  def KthNode(self, Root, k):
    if Root == None or k <= 0:
      return None
    self.k = k
    return self.InOrder(Root)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python selenium 三种等待方式解读
Sep 15 Python
浅析python中SQLAlchemy排序的一个坑
Feb 24 Python
用Python爬取QQ音乐评论并制成词云图的实例
Aug 24 Python
pytorch:torch.mm()和torch.matmul()的使用
Dec 27 Python
python实现删除列表中某个元素的3种方法
Jan 15 Python
python numpy 矩阵堆叠实例
Jan 17 Python
python 链接sqlserver 写接口实例
Mar 11 Python
python3 自动打印出最新版本执行的mysql2redis实例
Apr 09 Python
Pyecharts地图显示不完成问题解决方案
May 11 Python
如何基于Python按行合并两个txt
Nov 03 Python
Python3中FuzzyWuzzy库实例用法
Nov 18 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
Jan 08 Python
几行Python代码爬取3000+上市公司的信息
Jan 24 #Python
python安装pywin32clipboard的操作方法
Jan 24 #Python
Python中extend和append的区别讲解
Jan 24 #Python
对python pandas读取剪贴板内容的方法详解
Jan 24 #Python
Python3按一定数据位数格式处理bin文件的方法
Jan 24 #Python
Python使用post及get方式提交数据的实例
Jan 24 #Python
在python中利用opencv简单做图片比对的方法
Jan 24 #Python
You might like
在字符串中把网址改成超级链接
2006/10/09 PHP
PHP 网页过期时间的控制代码
2009/06/29 PHP
一个漂亮的php验证码类(分享)
2013/08/06 PHP
javascript 面向对象编程  function是方法(函数)
2009/09/17 Javascript
jquery实现商品拖动选择效果代码(自写)
2013/05/28 Javascript
Jquery 获取指定标签的对象及属性的设置与移除
2014/05/29 Javascript
详解JavaScript基于面向对象之创建对象(2)
2015/12/10 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
2016/07/01 Javascript
JS实现DIV高度自适应窗口示例
2017/02/16 Javascript
nodejs中全局变量的实例解析
2017/03/07 NodeJs
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
vue脚手架vue-cli的学习使用教程
2017/06/06 Javascript
Bootstrap Table使用整理(二)
2017/06/09 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
微信小程序实现图片懒加载的示例代码
2017/12/13 Javascript
详解vue.js根据不同环境(正式、测试)打包到不同目录
2018/07/13 Javascript
小程序实现上传视频功能
2020/08/18 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
Python实现线程池代码分享
2015/06/21 Python
python中的内置函数max()和min()及mas()函数的高级用法
2018/03/29 Python
python实现守护进程、守护线程、守护非守护并行
2018/05/05 Python
使用Python机器学习降低静态日志噪声
2018/09/29 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
Gauss-Seidel迭代算法的Python实现详解
2019/06/29 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
2019/07/03 Python
python 读写文件包含多种编码格式的解决方式
2019/12/20 Python
python打印文件的前几行或最后几行教程
2020/02/13 Python
写自荐信三大法宝
2014/01/24 职场文书
宾馆总经理岗位职责
2014/02/14 职场文书
学校文明单位申报材料
2014/05/06 职场文书
乡镇创先争优活动总结
2014/08/28 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
2015年度优秀员工自荐书
2015/03/06 职场文书
Nginx设置日志打印post请求参数的方法
2021/03/31 Servers
java多态注意项小结
2021/10/16 Java/Android
利用js实现简单开关灯代码
2021/11/23 Javascript