剑指Offer 62. 二叉搜索树的第k个结点 (二叉搜索树)
题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
例如,
5
/ \
3 7
/ \ / \
2 4 6 8
中,按结点数值大小顺序第三个结点的值为4。
题目地址
思路
这棵树是二叉搜索树,首先想到的是二叉搜索树的一个特点:左子结点的值 < 根结点的值 < 右子结点的值。
遇到bst(二叉搜索树)想到中序遍历,先中序遍历,然后找出第k个结点。
Python
class TreeNode:
def __init__(self,x):
self.val = x
self.left = None
self.right = None
node1 = TreeNode(5)
node2 = TreeNode(3)
node3 = TreeNode(7)
node4 = TreeNode(2)
node5 = TreeNode(4)
node6 = TreeNode(6)
node7 = TreeNode(8)
node1.left = node2
node1.right = node3
node2.left = node4
node2.right = node5
node3.left = node6
node3.right = node7
class Solution:
# 返回对应节点TreeNode
def KthNode(self, pRoot, k):
# write code here
# 思路1
# if not pRoot or k <=0:
# return None
# res = []
# self.inOrder(pRoot,res)
# if len(res) < k:
# return None
# return res[k-1]
# def inOrder(self, pRoot,res):
# if not pRoot:
# return None
# if pRoot.left:
# self.inOrder(pRoot.left,res)
# res.append(pRoot)
# if pRoot.right:
# self.inOrder(pRoot.right,res)
# 思路2
if not pRoot or k <= 0:
return None
treeStack,treeNode = [], []
pNode = pRoot
while pNode or len(treeStack):
while pNode:
treeStack.append(pNode)
pNode = pNode.left
if len(treeStack):
pNode = treeStack.pop()
treeNode.append(pNode)
pNode = pNode.right
if len(treeNode) < k:
return None
return treeNode[k-1]
if __name__ == '__main__':
result = Solution().KthNode(node1,3)
print(result.val)
剑指Offer 62. 二叉搜索树的第k个结点 (二叉搜索树)的更多相关文章
- 剑指offer四:链表中倒数第k个结点
输入一个链表,输出该链表中倒数第K个结点 public class ListNode { int val; ListNode next = null; ListNode(int val) { this ...
- 【剑指offer】链表中的倒数第k个结点
输入一个链表,输出该链表中倒数第k个结点. 分析: 定义两个结点p1和p2都指向头节点,p1先走k-1步,然后p1和p2一起走,当p1走到链表尾部时,p2指向的结点就是倒数第k个结点 遍历一遍链表即可 ...
- 剑指 Offer 62. 圆圈中最后剩下的数字 + 约瑟夫环问题
剑指 Offer 62. 圆圈中最后剩下的数字 Offer_62 题目描述 方法一:使用链表模拟 这种方法是暴力方法,时间复杂度为O(nm),在本题中数据量过大会超时. 方法二:递归方法 packag ...
- 剑指offer 62. 二叉搜索树的第 k 个结点
62. 二叉搜索树的第 k 个结点 题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. 法一: 非递归中序 ...
- 【Java】 剑指offer(62) 圆圈中最后剩下的数字
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 0, 1, …, n-1这n个数字排成一个圆圈,从数字0开始每 ...
- 【剑指offer】22. 链表中倒数第k个节点
剑指 Offer 22. 链表中倒数第k个节点 知识点:链表:双指针 题目描述 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例 ...
- 【Java】 剑指offer(52) 两个链表的第一个公共结点
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入两个链表,找出它们的第一个公共结点. 思路 蛮力法:遍历第一个 ...
- Go语言实现:【剑指offer】两个链表的第一个公共结点
该题目来源于牛客网<剑指offer>专题. 输入两个链表,找出它们的第一个公共结点. Go语言实现: //长度长的先走个长度差,然后ab一起比较后面结点 //长度一样,公共结点可能在首结点 ...
- [剑指Offer] 62.二叉搜索树的第k个结点
题目描述 给定一颗二叉搜索树,请找出其中的第k大的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. [思路]遍历二叉搜索树,存入一个vector ...
随机推荐
- docker-compose的使用
docker-compose的介绍 Compose是一个定义和管理多容器的工具,使用Python语言编写.使用Compose配置文件描述多个容器应用的架构,比如使用什么镜像.数据卷.网络.映射端口等; ...
- istio-opentracing链路追踪方案
目录 istio-opentracing链路追踪方案 envoy链路追踪 初始化追踪 跟踪上下文信息 istio链路追踪 链路追踪参数 采样率 jaeger istio中jaeger现状 jaeger ...
- dynamics crm跳转到手机版本的页面
https://community.dynamics.com/crm/f/117/t/210393 https://community.dynamics.com/crm/f/117/t/118414 ...
- SQL Pretty Printer for SSMS 很不错的SQL格式化插件
写SQL语句或者脚本时,看到凌乱的格式就头大了,于是决心找一款SQL语句格式化的工具. 功夫不负有心人还真的被我找到一款很好用,很方便的SQL Server插件:SQL Pretty Printer ...
- Jenkins的安装配置和使用
Jenkins的安装配置和使用 1 Jenkins介绍 w3cschool中这样介绍:Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个 ...
- Maven 插件打包部署项目
clean install -Dmaven.test.skip=true:打包工具 clean package
- 【转】package control安装成功,但是ctrl+shiif+p调不出来面板,preference里面也没有Package Control
原文:http://blog.csdn.net/fangfanggaogao/article/details/54405866 sublime text2 用了很长很长时间了,和package con ...
- 洛谷1855 榨取kkksc03
题目描述 洛谷2的团队功能是其他任何oj和工具难以达到的.借助洛谷强大的服务器资源,任何学校都可以在洛谷上零成本的搭建oj并高效率的完成训练计划. 为什么说是搭建oj呢?为什么高效呢? 因为,你可以上 ...
- CentOS 7中关闭删除virbr0虚拟网卡
[问题] 虚拟机IP:192.168.31.101 本地物理机IP:192.168.31.254 虚拟机安装在本地物理机上 发现问题:本地物理机ping得通虚拟机IP,但是虚拟机无法ping通物理机I ...
- Oracle根据时间恢复已删除提交的数据
Oracle 根据数据库的时间戳恢复已删除提交的数据 1.选择一个时间点查看表中数据是否是自己想要的数据 Select * from 表名 as of timestamp to_timestamp(‘ ...