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中的函数用法入门教程
Sep 02 Python
用Python实现协同过滤的教程
Apr 08 Python
python数组复制拷贝的实现方法
Jun 09 Python
python使用fcntl模块实现程序加锁功能示例
Jun 23 Python
Python自定义简单图轴简单实例
Jan 08 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
Jan 29 Python
python程序变成软件的实操方法
Jun 24 Python
python之mock模块基本使用方法详解
Jun 27 Python
Python Sympy计算梯度、散度和旋度的实例
Dec 06 Python
pytorch自定义二值化网络层方式
Jan 07 Python
如何真正的了解python装饰器
Aug 14 Python
MATLAB 全景图切割及盒图显示的实现步骤
May 14 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
PHP中OpenSSL加密问题整理
2017/12/14 PHP
新闻内页-JS分页
2006/06/07 Javascript
判断控件是否已加载完成的代码
2010/02/24 Javascript
JQuery 拾色器插件发布-jquery.icolor.js
2010/10/20 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
extjs4 treepanel动态改变行高度示例
2013/12/17 Javascript
[原创]推荐10款最热门jQuery UI框架
2014/08/19 Javascript
创建你的第一个AngularJS应用的方法
2015/06/16 Javascript
JS关闭窗口时产生的事件及用法示例
2016/08/20 Javascript
鼠标拖动改变DIV等网页元素的大小的实现方法
2017/07/06 Javascript
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
JS简单数组排序操作示例【sort方法】
2019/05/17 Javascript
javascript实现视频弹幕效果(两个版本)
2019/11/28 Javascript
ES6新增的数组知识实例小结
2020/05/23 Javascript
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
[02:28]DOTA2 2017国际邀请赛小组赛回顾
2017/08/09 DOTA
在Linux下调试Python代码的各种方法
2015/04/17 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
2018/02/13 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
2018/05/22 Python
Python 数值区间处理_对interval 库的快速入门详解
2018/11/16 Python
Django多数据库的实现过程详解
2019/08/01 Python
Python 操作 ElasticSearch的完整代码
2019/08/04 Python
Python处理session的方法整理
2019/08/29 Python
Python模块相关知识点小结
2020/03/09 Python
python 解决mysql where in 对列表(list,,array)问题
2020/06/06 Python
俄罗斯珠宝市场的领导者之一:Бронницкий ювелир
2019/10/02 全球购物
什么是java序列化,如何实现java序列化
2012/11/14 面试题
中学劳技课教师的自我评价
2014/02/05 职场文书
俞敏洪一分钟演讲稿
2014/08/26 职场文书
教师师德考核自我评价
2014/09/13 职场文书
银行奉献演讲稿
2014/09/16 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS
Mysql基础知识点汇总
2021/05/26 MySQL