剑指offer系列之六十一:二叉树搜索树的第k个节点
来源:互联网 发布:主题制作软件下载 编辑:程序博客网 时间:2024/06/05 14:51
题目描述
给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
因为二叉搜索树是排序的,所以如果需要找出第k个节点只需要进行中序遍历就可以得到第k节点。不过中序遍历的结果就是排序的,所以实质上就是插入排序。可以利用一个集合,在遍历的过程中利用插入排序的算法就能得到第k个节点。下面是这种实现思路的实现代码(已被牛客AC):
public class Solution { //采用非递归中序遍历的方式得到第k大的节点 TreeNode KthNode(TreeNode pRoot, int k) { if(pRoot== null) return pRoot; //创建一个变量指向第k大的节点 int p = 0; //创建一个栈用于保存遍历的顺序 Stack<TreeNode> s = new Stack<TreeNode>(); TreeNode curNode = pRoot; while(curNode != null || !s.isEmpty()){ while(curNode != null){ s.add(curNode); curNode = curNode.left; } if(!s.isEmpty()){ curNode = s.pop(); p++; if(p == k) return curNode; curNode = curNode.right; } } return null; }}
0 0
- 剑指offer系列之六十一:二叉树搜索树的第k个节点
- 剑指offer-二叉搜索树的第K个节点
- 剑指offer 63 - 二叉搜索树的第K个节点
- 剑指offer----二叉搜索树的第K个节点----java实现
- 剑指offer面试题63:二叉搜索树的第k个节点 Java实现
- 剑指Offer--二叉搜索树的第K个节点-不会
- 剑指offer——二叉搜索树的第k个节点
- 【剑指offer】题63:二叉搜索树的第k个节点
- 《剑指offer》二叉搜索树的第k个结点
- 剑指offer:二叉搜索树的第k个结点
- [剑指offer]二叉搜索树的第k个结点
- 剑指offer-二叉搜索树的第k个结点
- 【剑指Offer】二叉搜索树的第k个结点
- 剑指offer 二叉搜索树的第k个结点
- 剑指Offer:二叉搜索树的第K个结点
- 剑指offer-二叉搜索树的第k个结点
- 剑指Offer------二叉搜索树的第k个结点
- 剑指offer---二叉搜索树的第k个结点
- 第三十六课——简单文字处理
- Android Studio使用lambda
- ajax异步加载TreeGrid数据,使用empty()清空原始数据
- iOS新建项目架构规范
- iOS Default-568@2x.png启动图片设置问题
- 剑指offer系列之六十一:二叉树搜索树的第k个节点
- c++ note--二叉树的实现
- CocoaPod的安装及与Swift的桥接
- ssh 10个选项
- preg_match_all()匹配
- Html 排版与标签(一)
- 【Swift】通过tag删除动态创建的UIButton
- MapReduce之Reduce端Join实现
- 【Unity NGUI】学习笔记(一):英雄选择,皮肤更换