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获取当前运行函数名称的方法实例代码
Apr 06 Python
python构建深度神经网络(续)
Mar 10 Python
python文件操作之批量修改文件后缀名的方法
Aug 10 Python
对python3标准库httpclient的使用详解
Dec 18 Python
python paramiko利用sftp上传目录到远程的实例
Jan 03 Python
djang常用查询SQL语句的使用代码
Feb 15 Python
pyqt5 使用cv2 显示图片,摄像头的实例
Jun 27 Python
django多对多表的创建,级联删除及手动创建第三张表
Jul 25 Python
解析python的局部变量和全局变量
Aug 15 Python
python PIL/cv2/base64相互转换实例
Jan 09 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
Apr 14 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
May 11 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
数据库中排序的对比及使用条件详解
2012/02/23 PHP
PHP 验证码不显示只有一个小红叉的解决方法
2013/09/30 PHP
php从给定url获取文件扩展名的方法
2015/03/14 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
PHP Callable强制指定回调类型的方法
2016/08/30 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
2017/09/26 PHP
JS中彻底删除JSON对象组成的数组中的元素
2020/09/22 PHP
Jquery工作常用实例 使用AJAX使网页进行异步更新
2011/07/26 Javascript
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
js类型转换与引用类型详解(Boolean_Number_String)
2014/03/07 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
js中split和replace的用法实例
2015/02/28 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
JS 拼凑字符串的简单实例
2016/09/02 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
2016/11/09 Javascript
jquery的父、子、兄弟节点查找,节点的子节点循环方法
2016/12/07 Javascript
Vue实现动态响应数据变化
2017/04/28 Javascript
浅谈Vue初学之props的驼峰命名
2018/07/19 Javascript
浅谈vuex中store的命名空间
2019/11/08 Javascript
python使用socket进行简单网络连接的方法
2015/04/29 Python
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
python绘制规则网络图形实例
2019/12/09 Python
Python命令行click参数用法解析
2019/12/19 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
Ranorex通过Python将报告发送到邮箱的方法
2020/01/12 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
详解Html5 Canvas画线有毛边解决方法
2018/03/01 HTML / CSS
护理专业毕业生自我鉴定
2013/10/08 职场文书
销售业务员岗位职责
2014/01/29 职场文书
四查四看整改措施
2014/09/19 职场文书
公司授权委托书
2014/10/17 职场文书
2014教师专业技术工作总结
2014/12/03 职场文书
爱心募捐感谢信
2015/01/22 职场文书
诚信考试承诺书范文
2015/04/29 职场文书
Android中的Launch Mode详情
2022/06/05 Java/Android