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使用Berkeley DB数据库实例
Sep 26 Python
python中as用法实例分析
Apr 30 Python
Windows下实现Python2和Python3两个版共存的方法
Jun 12 Python
对pandas的dataframe绘图并保存的实现方法
Aug 05 Python
浅析Python中return和finally共同挖的坑
Aug 18 Python
对python中的for循环和range内置函数详解
Apr 17 Python
python使用pymongo操作mongo的完整步骤
Apr 13 Python
Python Django Vue 项目创建过程详解
Jul 29 Python
python输出数组中指定元素的所有索引示例
Dec 06 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
Feb 03 Python
tensorflow之tf.record实现存浮点数数组
Feb 17 Python
python操作微信自动发消息的实现(微信聊天机器人)
Jul 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
在html文件中也可以执行php语句的方法
2015/04/09 PHP
php实现的IMEI限制的短信验证码发送类
2015/05/05 PHP
微信支付开发订单查询实例
2016/07/12 PHP
PHP+Apache实现二级域名之间共享cookie的方法
2019/07/24 PHP
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
2009/12/28 Javascript
js切换div css注意的细节
2012/12/10 Javascript
document.documentElement和document.body区别介绍
2013/09/16 Javascript
JavaScript数组常用方法
2015/03/02 Javascript
jQuery实现精美的多级下拉菜单特效
2015/03/14 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
JavaScript实现向setTimeout执行代码传递参数的方法
2015/04/16 Javascript
js文字横向滚动特效
2015/11/11 Javascript
vue 2.0组件与v-model详解
2017/03/27 Javascript
jQuery设置图片等比例缩小的方法
2017/04/29 jQuery
jQuery中.attr()和.data()的区别分析
2017/09/03 jQuery
基于Bootstrap实现城市三级联动
2017/11/23 Javascript
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
webpack手动配置React开发环境的步骤
2018/07/02 Javascript
jQuery插件实现的日历功能示例【附源码下载】
2018/09/07 jQuery
WebSocket的简单介绍及应用
2019/05/23 Javascript
ES6的异步终极解决方案分享
2019/07/11 Javascript
Python中无限元素列表的实现方法
2014/08/18 Python
用Python的Django框架完成视频处理任务的教程
2015/04/02 Python
Python线程中对join方法的运用的教程
2015/04/09 Python
深入理解Python中的*重复运算符
2017/10/28 Python
pandas.DataFrame 根据条件新建列并赋值的方法
2018/04/08 Python
Python3实现的简单验证码识别功能示例
2018/05/02 Python
pygame实现五子棋游戏
2019/10/29 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
2020/01/10 Python
详解如何在PyCharm控制台中输出彩色文字和背景
2020/08/17 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
2020/11/18 Python
工地安全检查制度
2014/02/04 职场文书
护士毕业生自荐信
2014/02/07 职场文书
cf搞笑广告词
2014/03/14 职场文书
pandas中pd.groupby()的用法详解
2022/06/16 Python