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的Supervisor进行进程监控以及自动启动
May 29 Python
Python作用域用法实例详解
Mar 15 Python
Python中的time模块与datetime模块用法总结
Jun 30 Python
新手如何快速入门Python(菜鸟必看篇)
Jun 10 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
Nov 16 Python
使用python实现ANN
Dec 20 Python
python使用pycharm环境调用opencv库
Feb 11 Python
python 使用 requests 模块发送http请求 的方法
Dec 09 Python
Django 大文件下载实现过程解析
Aug 01 Python
python3 selenium自动化 下拉框定位的例子
Aug 23 Python
python 装饰器重要在哪
Feb 14 Python
Python还能这么玩之用Python做个小游戏的外挂
Jun 04 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
第1次亲密接触PHP5(1)
2006/10/09 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
2011/10/03 PHP
php中使用preg_replace函数匹配图片并加上链接的方法
2013/02/06 PHP
浅析php变量作用域的一些问题
2013/08/08 PHP
PHP图片自动裁切应付不同尺寸的显示
2014/10/16 PHP
10个超级有用值得收藏的PHP代码片段
2015/01/22 PHP
PHP中异常处理的一些方法整理
2015/07/03 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
2017/05/04 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
document.documentElement &amp;&amp; document.documentElement.scrollTop
2007/12/01 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
jquery ajax提交整个表单元素的快捷办法
2013/03/27 Javascript
js相册效果代码(点击创建即可)
2013/04/16 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
JavaScript取得键盘按下方向键是哪个的方法
2015/08/04 Javascript
详解js图片轮播效果实现原理
2015/12/17 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
Vue监听数据对象变化源码
2017/03/09 Javascript
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
JavaScript数组类型Array相关的属性与方法详解
2020/09/08 Javascript
经验丰富程序员才知道的8种高级Python技巧
2020/07/27 Python
python实现简单的五子棋游戏
2020/09/01 Python
Python 利用argparse模块实现脚本命令行参数解析
2020/12/28 Python
MATCHESFASHION.COM美国官网:英国奢侈品零售商
2018/10/29 全球购物
院药学专业个人求职信
2013/09/21 职场文书
受欢迎的大学生自我评价
2013/12/05 职场文书
个人查摆剖析材料
2014/02/04 职场文书
学雷锋先进个人事迹
2014/05/26 职场文书
银行服务明星推荐材料
2014/05/29 职场文书
上党课的心得体会
2014/09/02 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
家长反馈意见及建议
2015/06/03 职场文书
Filebeat 采集 Nginx 日志的方法
2021/03/31 Servers
HDFS免重启挂载新磁盘
2022/04/06 Servers