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三元运算符实现方法
Dec 17 Python
用Python的Django框架完成视频处理任务的教程
Apr 02 Python
python下paramiko模块实现ssh连接登录Linux服务器
Jun 03 Python
python用10行代码实现对黄色图片的检测功能
Aug 10 Python
python select.select模块通信全过程解析
Sep 20 Python
使用Python 正则匹配两个特定字符之间的字符方法
Dec 24 Python
python使用paramiko实现ssh的功能详解
Mar 06 Python
python实现将字符串中的数字提取出来然后求和
Apr 02 Python
python读取配置文件方式(ini、yaml、xml)
Apr 09 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
Jul 13 Python
如何利用python检测图片是否包含二维码
Oct 15 Python
Django程序的优化技巧
Apr 29 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
Yii2隐藏frontend/web和backend/web的方法
2015/12/12 PHP
PHP实现长文章分页实例代码(附源码)
2016/02/03 PHP
php事务回滚简单实现方法示例
2017/03/28 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
2018/10/14 PHP
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
2010/03/08 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
Javascript基础教程之关键字和保留字汇总
2015/01/18 Javascript
jQuery+json实现的简易Ajax调用实例
2015/12/14 Javascript
JS Array.slice 截取数组的实现方法
2016/01/02 Javascript
一个用jquery写的判断div滚动条到底部的方法【推荐】
2016/04/29 Javascript
jquery中用函数来设置css样式
2016/12/22 Javascript
vue在使用ECharts时的异步更新和数据加载详解
2017/11/22 Javascript
浅谈Webpack打包优化技巧
2018/06/12 Javascript
Vue.js更改调试地址端口号的实例
2018/09/19 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
JS sort排序详细使用方法示例解析
2020/09/27 Javascript
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
python 爬取微信文章
2016/01/30 Python
Python爬虫代理IP池实现方法
2017/01/05 Python
Python中with及contextlib的用法详解
2017/06/08 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
2019/01/02 Python
用python3读取python2的pickle数据方式
2019/12/25 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
2020/03/03 Python
解决Python spyder显示不全df列和行的问题
2020/04/20 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
Python GUI库Tkiner使用方法代码示例
2020/11/27 Python
HTML5 window/iframe跨域传递消息 API介绍
2013/08/26 HTML / CSS
主管会计岗位责任制
2014/02/10 职场文书
小学生优秀评语大全
2014/04/22 职场文书
幼儿园亲子活动总结
2014/04/26 职场文书
党的群众路线教育实践活动心得体会(医院)
2014/11/03 职场文书
2014年办公室个人工作总结
2014/11/12 职场文书
婚庆答谢词
2015/01/04 职场文书
公文写作:教你写“建议书”
2019/05/07 职场文书