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网络编程学习笔记(九):数据库客户端 DB-API
Jun 09 Python
python中enumerate的用法实例解析
Aug 18 Python
在Python的Django框架中创建和使用模版
Jul 15 Python
numpy向空的二维数组中添加元素的方法
Nov 01 Python
python 产生token及token验证的方法
Dec 26 Python
Python英文文本分词(无空格)模块wordninja的使用实例
Feb 20 Python
Python之NumPy(axis=0 与axis=1)区分详解
May 27 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
Jul 08 Python
Django微信小程序后台开发教程的实现
Jun 03 Python
使用OpenCV去除面积较小的连通域
Jul 05 Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
Aug 07 Python
利用Python判断你的密码难度等级
Jun 02 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
How do I change MySQL timezone?
2008/03/26 PHP
php读取大文件示例分享(文件操作类)
2014/04/13 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
调试php程序的简单步骤
2019/10/04 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
2020/12/30 PHP
java script编程起步(第三课)
2007/01/10 Javascript
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
Javascript中的this绑定介绍
2011/09/22 Javascript
Jquery中给animation加更多的运作效果实例
2013/09/05 Javascript
关于Javascript作用域链的八点总结
2013/12/06 Javascript
js导出txt示例代码
2014/01/14 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
javascript下拉框选项单击事件的例子分享
2015/03/04 Javascript
jQuery对JSON数据进行排序输出的方法
2015/06/24 Javascript
基于vue的下拉刷新指令和滚动刷新指令
2016/12/23 Javascript
jQuery简单获取DIV和A标签元素位置的方法
2017/02/07 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
用Webpack构建Vue项目的实践
2017/11/07 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
2019/03/12 Javascript
如何根据业务封装自己的功能组件
2019/04/19 Javascript
python使用xlrd实现检索excel中某列含有指定字符串记录的方法
2015/05/09 Python
详解Python中dict与set的使用
2015/08/10 Python
python实现代码统计程序
2019/09/19 Python
python无序链表删除重复项的方法
2020/01/17 Python
Pycharm 如何一键加引号的方法步骤
2021/02/05 Python
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
机电专业个人求职信范文
2013/12/30 职场文书
校友会欢迎辞
2014/01/13 职场文书
《挑山工》的教学反思
2014/02/16 职场文书
主管竞聘书范文
2014/03/31 职场文书
《最大的麦穗》教学反思
2014/04/17 职场文书
党的群众路线教育实践活动整改落实情况自查报告
2014/10/28 职场文书
导游欢迎词范文
2015/01/23 职场文书
2015年保洁员工作总结
2015/05/04 职场文书
医院党建工作总结2015
2015/05/26 职场文书
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
2022/06/01 Java/Android