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中metaclass元类的创建与使用
Jun 30 Python
用sqlalchemy构建Django连接池的实例
Aug 29 Python
python如何实现复制目录到指定目录
Feb 13 Python
IntelliJ 中配置 Anaconda的过程图解
Jun 01 Python
python如何从键盘获取输入实例
Jun 18 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
Jul 21 Python
如何利用python进行时间序列分析
Aug 04 Python
python中round函数保留两位小数的方法
Dec 04 Python
python中二分查找法的实现方法
Dec 06 Python
如何用python 操作zookeeper
Dec 28 Python
Python实现一个论文下载器的过程
Jan 18 Python
如何用tempfile库创建python进程中的临时文件
Jan 28 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
深入extjs与php参数交互的详解
2013/06/25 PHP
让网页根据不同IE版本显示不同的内容
2009/02/08 Javascript
javascript 年月日联动实现核心代码
2009/12/21 Javascript
js下用eval生成JSON对象
2010/09/17 Javascript
jQuery的12招常用技巧分享
2011/08/08 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
2013/06/25 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
2014/09/26 NodeJs
JS+CSS实现可以凹陷显示选中单元格的方法
2015/03/02 Javascript
jQuery实现列表的全选功能
2015/03/18 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
深入理解JavaScript的React框架的原理
2015/07/02 Javascript
bootstrap网页框架的使用方法
2016/05/10 Javascript
Vue.js中兄弟组件之间互相传值实例
2017/06/01 Javascript
说说AngularJS中的$parse和$eval的用法
2017/09/14 Javascript
nodejs实现简单的gulp打包
2017/12/21 NodeJs
ES6 Set结构的应用实例分析
2019/06/26 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
2020/08/06 Javascript
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
Python中变量交换的例子
2014/08/25 Python
Python读取excel中的图片完美解决方法
2018/07/27 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
2019/08/22 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
借助HTML5 Canvas API制作一个简单的猜字游戏
2016/03/25 HTML / CSS
亚洲最大的眼镜批发商和零售商之一:Glasseslit
2018/10/08 全球购物
植村秀加拿大官网:Shu Uemura加拿大
2019/09/03 全球购物
普罗米修斯教学反思
2014/02/06 职场文书
大学军训感言200字
2014/02/26 职场文书
库房管理员岗位职责
2014/03/09 职场文书
团日活动总结怎么写
2014/06/25 职场文书
幼儿园教师自我评价
2015/03/04 职场文书
小学教师党员承诺书
2015/04/27 职场文书
“爱眼护眼,提前预防近视”倡议书3篇
2019/10/30 职场文书
Java实现多线程聊天室
2021/06/26 Java/Android